Bluetooth Mesh Flooding in Wireless Sensor Networks

This example demonstrates network layer flooding in a Bluetooth mesh network using the Communications Toolbox™ Library for the Bluetooth® Protocol. Flooding is a mechanism in which every incoming packet is sent through every outgoing link except the one it arrived on. The flooding mechanism is studied by identifying a path between source and destination nodes through intermediate relay nodes. This example also shows how to perform Monte Carlo simulations on the Bluetooth mesh network to obtain numerical results averaged over multiple iterations.

Bluetooth Mesh Stack

The Bluetooth Core Specification [ 1 ] includes a Low Energy version for low-rate wireless personal area networks, referred to as Bluetooth Low Energy (BLE) or Bluetooth Smart. The BLE stack consists of Generic Attribute Profile (GATT), Attribute Protocol (ATT), Security Manager Protocol (SMP), Logical Link Control and Adaptation Protocol (L2CAP), Link layer (LL) and Physical layer. BLE was added to the standard for low energy devices generating small amounts of data, such as notification alerts used in such applications as home automation, health-care, fitness, and Internet of Things (IoT).

The Bluetooth mesh profile [ 2 ] defines the fundamental requirements to implement a mesh networking solution for BLE. The mesh stack is located on top of the BLE core specification and consists of Model Layer, Foundation Model Layer, Access Layer, Upper Transport Layer, Lower Transport Layer, Network Layer and Bearer Layer. Bluetooth mesh networking enables large-scale device networks in the applications such as smart lighting, industrial automation, sensor networking, asset tracking, and many other IoT solutions.

The two types of bearers supported by Bluetooth mesh are advertising bearer and GATT bearer. This example considers only the advertising bearer. The figure below shows Bluetooth mesh stack over advertising bearer.

Bluetooth Mesh Network Layer

The network layer is mainly responsible for:

  • Transmitting the upper layer messages over the network using bearer layer

  • Relaying the mesh messages

  • Network level security

Some of the major functionalities of the network layer are shown below.

Relay feature: In order to have a reliable and efficient flooding mechanism, the Bluetooth mesh standard defines the relay feature. Relay feature enabled nodes can retransmit mesh messages over the network. This helps in reducing the channel congestion compared to the traditional flooding where each node retransmits the received message. Nodes can enable or disable the relay feature based on network conditions. The relay node (any mesh node having relay feature enabled) forwards the received message throughout the network. This helps in extending the reach of mesh message to enable large-scale networks.

Managed flooding: The Bluetooth mesh profile [ 2 ] specifies the methods to optimize the flooding operation for an efficient network. This is called as managed flooding. Major methods used in managed flooding are:

  • Message Cache: All nodes must implement a network message cache. The message cache contains all the recently seen network messages. If the received message is found to be in the cache, then it gets discarded.

  • TTL: Time-to-live (TTL) controls the number of hops a message is relayed in a network. Choosing an optimal TTL value conserves energy over the network. If the TTL value at a node is greater than or equal to 2, it indicates that the message may have been relayed and can be relayed. TTL value less than 2, indicates the message may have been relayed but will not be relayed.

  • Heartbeats: Heartbeat messages are sent by the nodes periodically. It is used as an indication to the receiving nodes, that the sending node is alive. At the receiving node the optimal TTL value for publishing a message to the sender is derived from the heartbeat message.

Network Addresses: The network layer defines four types of addresses:

  • Unassigned Address: An unassigned address indicates no address has been allocated to the node

  • Unicast Address: A unicast address is used for unique identification of the node

  • Group Address: A group address is used to identify a group of nodes

  • Virtual Address: A virtual address represents a set of destination addresses. Each virtual address logically represents a 128-bit label UUID (Universally Unique Identifier)

In Bluetooth mesh flooding, the network layer plays a crucial role. All the network messages received and transmitted in the network layer use either the advertising bearer or the GATT bearer. The relay and proxy features in the network layer help in enabling large-scale mesh networks. The relay feature is used to relay/forward network PDUs received by a node over the advertising bearer. The proxy feature is used to relay/forward network PDUs received by a node between GATT and advertising bearers. In this example, Bluetooth mesh flooding in a wireless sensor network using advertising bearer is demonstrated.

Check for Support Package Installation

% Check if the 'Communications Toolbox Library for the Bluetooth Protocol'
% support package is installed or not.
commSupportPackageCheck('BLUETOOTH');

Bluetooth Mesh Flooding Simulation

This example allows you to create and configure a Bluetooth mesh network. Two network scenarios, each consisting of a fifty node mesh network are created and some of these nodes are configured as relays. In each scenario, source and destination node pairs and their corresponding TTL values are specified. In the first scenario, the paths between source and destination nodes are identified. You can also visualize the message flow in the network with statistics. In the second scenario, some of the relay and end nodes (any node in the mesh network) are failed. Moreover, the relay feature of some of the relay nodes is also disabled. The simulations show that there is a chance of having a path between the selected source and destination nodes, even if some of the intermediate relay and end nodes fail in the network.

Goals:

  • Create and configure a mesh network

  • Visualize message flooding

  • Derive path between selected source and destination

  • Display statistics (refer Network Layer Statistics at Each Node) at each node

Configuration:

  • Source and destination node pairs

  • TTL value for packet originated at each source

  • Relay nodes

  • Failed nodes

Results:

Create and configure mesh network:

You can use helperBLEMeshNetworkNode and helperBLEMeshVisualizeNetwork for creating and visualizing the mesh network respectively. You need to specify NumberOfNodes and NodePositionType in helperBLEMeshVisualizeNetwork. The default value for NodePositionType is 'Grid'. You can also specify your own network by configuring the value of NodePositionType to 'UserInput' and node positions to Positions.

% Set random number generator seed to 'default'
sprev = rng('default');

% Number of nodes in the mesh network
totalNodes = 50;

% Initialize 'bleMeshNodes' vector with objects of type
% helperBLEMeshNetworkNode
bleMeshNodes(1, totalNodes) = helperBLEMeshNetworkNode;
% Configure mesh nodes
for idx = 1:totalNodes
    meshNode = helperBLEMeshNetworkNode;
    meshNode.Identifier = idx;
    meshNode.NetworkLayer.ElementAddresses = dec2hex(idx, 4);
    bleMeshNodes(idx) = meshNode;
end

% Load node positions
load('bleMeshNetworkNodePositions.mat');

% Create visualization objects for two scenarios
numberOfScenarios = 2;
% Initialize 'meshNetworkPlots' vector with objects of type
% helperBLEMeshVisualizeNetwork
meshNetworkPlots(1, numberOfScenarios) = helperBLEMeshVisualizeNetwork;
for idx = 1:numberOfScenarios
    meshNetworkPlots(idx) = helperBLEMeshVisualizeNetwork;
    meshNetworkPlots(idx).NumberOfNodes = totalNodes;
    % Set type of allocation 'Grid' | 'UserInput'
    meshNetworkPlots(idx).NodePositionType = 'UserInput';
    % Set node positions based on number of nodes (applicable for
    % 'UserInput'), in meters
    meshNetworkPlots(idx).Positions = bleMeshNetworkNodePositions;
    % Set vicinity range based on node positions, in meters
    meshNetworkPlots(idx).VicinityRange = 25;
    % Set title
    meshNetworkPlots(idx).Title = ...
        ['Scenario ' num2str(idx) ': Bluetooth Mesh Flooding'];
end

Configure simulation parameters: Simulation parameters are configured as shown below. You can specify the number of source and destination pairs in the network using srcDstPairs. The simulation results contain the obtained paths corresponding to each source and destination pair. You can also view the network layer statistics at each node. However, in the displayed plot, you can visualize the results for the first three source and destination pairs.

% Simulation time, in milliseconds
simulationTime = 600;

% Enable/disable visualization
enableVisualization = true;

% Source and destination pairs
srcDstPairs = [1 7; 13 29];

% TTL values for packet originated at each source node
ttl = [25; 25];

Simulations: The functions helperBLEMeshFloodingSimulation and helperBLEMeshFloodingSimulationResults run the simulation and gather simulation results respectively.

  • Scenario one: In this scenario, all the fifty nodes in the network are active. Some of these nodes are selected as relays. The plot shown below highlights the corresponding paths for each source and destination pair. Results containing the obtained paths are stored in scenarioOneResults.

% Relay nodes
relayNodeIDs = [3 4 5 8 10 11 15 19 20 21 23 25 28 30 32 34 36 37 38 39 41 ...
    42 43 44 45 46 47 48 49];

% Failed nodes (nodes that are out of network)
failedNodeIDs = [];

% Simulate the scenario
pathScenarioOne = helperBLEMeshFloodingSimulation(totalNodes, bleMeshNodes, meshNetworkPlots(1), ...
    simulationTime, srcDstPairs, ttl, relayNodeIDs, failedNodeIDs, ...
    enableVisualization);

% Scenario result
scenarioOneResults = helperBLEMeshFloodingSimulationResults(srcDstPairs, pathScenarioOne)
scenarioOneResults =

  2x4 table

    Source    Destination        Path        NumberOfHops
    ______    ___________    ____________    ____________

       1           7         {1x9 double}         8      
      13          29         {1x7 double}         6      

  • Scenario two: The network configuration is altered to demonstrate that there is an alternate path between the source and destination nodes. In this scenario, relay feature is disabled at the node 41. Whereas, the nodes 3 and 43 are removed from the network. The plot shown below highlights the corresponding paths for each source and destination pair. Results containing the obtained paths are stored in scenarioTwoResults.

% Relay nodes
relayNodeIDs = [4 5 8 10 11 15 19 20 21 23 25 28 30 32 34 36 37 38 39 42 ...
    44 45 46 47 48 49];

% Failed nodes (nodes that are out of network)
failedNodeIDs = [3, 43];

% Simulate the scenario
pathScenarioTwo = helperBLEMeshFloodingSimulation(totalNodes, bleMeshNodes, meshNetworkPlots(2), ...
    simulationTime, srcDstPairs, ttl, relayNodeIDs, failedNodeIDs, ...
    enableVisualization);

% Scenario result
scenarioTwoResults = helperBLEMeshFloodingSimulationResults(srcDstPairs, pathScenarioTwo)
scenarioTwoResults =

  2x4 table

    Source    Destination        Path         NumberOfHops
    ______    ___________    _____________    ____________

       1           7         {1x11 double}         10     
      13          29         {1x8  double}          7     

Network Layer Statistics at Each Node

The network layer statistics captured at each node are:

  • Number of messages transmitted from the node

  • Number of messages received by the node

  • Number of application Rx messages i.e. messages considered for further processing at the node

  • Number of messages relayed by the node

  • Number of messages dropped at the node

The workspace variable statisticsAtEachNode contains cumulative network statistics of all the nodes for both the scenarios. However, for a given simulation run, You can see the network statistics for a maximum of first five nodes. The network statistics for the first five nodes in the network are:

statisticsAtEachNode = helperBLEMeshFloodingSimulationResults(bleMeshNodes);
statisticsForFirstFiveNodes = statisticsAtEachNode(1:min(5, totalNodes), :)
statisticsForFirstFiveNodes =

  5x6 table

    NodeID    TotalTxMsgs    TotalRxMsgs    TotalAppRxMsgs    TotalRelayedMsgs    TotalDroppedMsgs
    ______    ___________    ___________    ______________    ________________    ________________

      1            2              4               0                  0                   4        
      2            0              8               0                  0                   8        
      3            0              5               0                  2                   3        
      4            0             10               0                  4                   6        
      5            0              9               0                  4                   5        

Further Exploration

The Monte Carlo method [ 3 ] is used for obtaining numerical results averaged over multiple simulations. Monte Carlo simulations are performed on the Bluetooth mesh network using these configuration parameters to analyze the probability of message delivery by modeling node failures.

% Source and destination nodes
srcDstPair = [16 12];

% TTL value for the message originated at the above source node
ttl = 25;

% Relay nodes
relayNodeIDs = [21 15 25 11 38 19 46 8 39 20 37 32 30 5 45 49 43 3 28 36 47 ...
    34 23 48 41 44 42 10 4];

% Failed nodes (nodes that are out of network)
failedNodeIDs = [];

In each simulation, relay nodes are disabled randomly between the source and destination nodes, and the corresponding path is stored. These simulations are run by varying ten thousand seeds for the random number generator. The statistics observed after performing the Monte Carlo simulations are:

  • Probability of a message delivery from source to destination when relay nodes are failing randomly in the network

  • Average hop count needed between the source and destination nodes

  • Critical relays in having a path between source and destination

For the above configuration, you can see the simulation results in the MAT file bleMeshMonteCarloResults.mat.

load('bleMeshMonteCarloResults.mat');
disp(['Probability of having a route between nodes ' num2str(srcDstPair(1)) ...
    ' and ' num2str(srcDstPair(2)) ' is: ' ...
    num2str(probabilityOfSuccess) '%']);
disp(['Average hop count between nodes ' num2str(srcDstPair(1)) ' and ' ...
    num2str(srcDstPair(2)) ' is: ' ...
    num2str(averageHopCount)]);
disp(['Apart from the vicinity nodes of node ' num2str(srcDstPair(1)) ...
    ' and node ' num2str(srcDstPair(2)) ', nodes [' num2str(criticalRelaysInfo{1:5, 1}') ...
    '] are the top five critical relays in having a path between them.']);
% Restore the previous setting of random number generation
rng(sprev);
Probability of having a route between nodes 16 and 12 is: 88.6428%
Average hop count between nodes 16 and 12 is: 8
Apart from the vicinity nodes of node 16 and node 12, nodes [39  37   8  38   4] are the top five critical relays in having a path between them.

You can run/modify helperBLEMeshMonteCarloSimulations script (long run simulation) for generating results through Monte Carlo simulations.

This example enables you to create and configure a multi-node Bluetooth mesh network and analyze the network layer flooding. To study the flooding behavior, two simulation scenarios are considered. In the first scenario, the path between source and destination nodes is identified and visualized by selecting some intermediate nodes as relay nodes. In the second scenario, some nodes (Relay and End) are dropped, and the relay feature for some of the relay nodes is disabled. The obtained results show that there exists a path between the source and destination nodes even if nodes (Relay and End) fail randomly in the network.

This example allows you to create your own Bluetooth mesh network and visualize network flooding in it with statistics. Furthermore, you can also perform Monte Carlo simulations on the Bluetooth mesh network to obtain numerical results averaged over multiple iterations.

Appendix

The helpers used in this example are:

Selected Bibliography

  1. Bluetooth Special Interest Group (SIG). "Bluetooth Core Specification". Version 5.0. https://www.bluetooth.com

  2. Bluetooth Special Interest Group (SIG). "Bluetooth Mesh Profile". Version 1.0. https://www.bluetooth.com

  3. Metropolis, L. and S. Ulam. "The Monte Carlo Method" Journal of the American Statistical Association. Vol. 44, Number 247, 1949, pp. 335-341