The Mistake: Deploying a Bluetooth Mesh lighting system in a 5-floor office building using the default TTL (Time To Live) of 5, then discovering that lights on floors 4-5 never receive commands from the ground floor control panel, even though mesh connectivity tests show all devices are “reachable.”
Why It Happens: Bluetooth Mesh uses managed flooding where each relay node forwards messages and decrements the TTL counter. When TTL reaches 0, the message stops propagating. Developers often use default TTL values without measuring their network’s actual hop count (diameter), assuming that “if all nodes are connected, commands will reach everywhere.”
Real-World Impact:
- Deployment shape: 200 smart lights across five floors, with 40 lights per floor and lights acting as relay nodes.
- Control point: Ground-floor control panel sends commands upward through the mesh.
- Measured hop counts: Floor 1 needs 1-2 hops, floor 2 needs 2-3, floor 3 needs 3-4, floor 4 needs 4-6, and floor 5 can require 5-8 hops.
- With TTL = 5: Floors 1-3 work reliably, floor 4 is intermittent, and floor 5 fails when the path needs more than five relay hops.
- User symptom: An “All Lights Off” command reaches lower floors immediately, reaches floor 4 inconsistently, and never reaches floor 5.
The Fix: Measure network diameter and set TTL accordingly:
Step 1: Measure Actual Hop Counts
Use a mesh diagnostic or traceroute-style test from the control node to every floor. Record the hop count for each target and take the maximum observed value as the network diameter. In this example, the farthest floor requires 8 hops.
Step 2: Calculate Safe TTL
Use TTL = network_diameter x safety_factor. With an 8-hop measured diameter and a 1.5x safety factor for path variability and future growth, the recommended TTL is 8 x 1.5 = 12. Set whole-building control commands to TTL = 12.
Step 3: Verify Coverage After TTL Update
Run delivery tests from the control panel to all mesh nodes:
- TTL = 5: about 65% coverage.
- TTL = 8: about 85% coverage.
- TTL = 12: about 99% coverage.
Log any failed nodes by floor so the remaining gaps can be tied to relay density, RF loss, or topology rather than guessed from user reports.
Advanced: Dynamic TTL by Message Type
Use different TTL values for different command scopes:
- Zone command: TTL 5 for a single zone or nearby same-floor devices.
- Floor command: TTL 8 for an entire floor.
- Building command: TTL 12 for all lights across the building.
This keeps local commands from flooding farther than needed while preserving reliable whole-building control.
Result: After increasing TTL from 5 to 12, floor 5 command delivery improved from 0% to 99%. The trade-off is slightly more network traffic (each message travels farther), but reliability dramatically improved.
Key Insight: Bluetooth Mesh TTL is not “one size fits all.” Always measure your actual network diameter with diagnostic tools, then set TTL to at least 1.5× the measured maximum hop count. For multi-floor buildings, expect 4-8 hops from ground floor to top floor depending on relay density and floor separation.