Why Downlink Matters

Most BLE Tag deployments are uplink-only: the tag broadcasts telemetry and a gateway listens. But real asset-tracking and sensor systems need the gateway to talk back — push configuration, trigger a buzzer, request an immediate location ping, or revoke a key. A Bluetooth Beacon / BLE Tag that only shouts is half a system. This article covers the three downlink paths and how to do them safely.

Path 1: Connected GATT Write

The gateway (or a maintenance phone) opens a connection and writes a control characteristic.

  • Connection interval 7.5-100 ms; for sporadic commands a 100-200 ms interval keeps the tag’s average current low.
  • Use a single `Control` characteristic (write-without-response for fire-and-forget, write for ACK).
  • Payload: `[Cmd:1B][Len:1B][Payload:N][CRC:2B]`.
  • Power cost: a connection event costs ~3-8 mA for 1-5 ms; batch commands to amortize.

Path 2: Connectionless Broadcast Command

For one-to-many control, broadcast a signed command on a dedicated ADV channel.

ADV: 0x16 (Service Data) custom UUID
Bytes: [Cmd][Seq][TargetMask][Sig:8B]
  • Tags in scan mode pick it up without connecting — scales to thousands.
  • Risk: replay. Always include a monotonic `Seq` and a short TTL.

Path 3: Periodic Fetch (Tag Pulls)

The tag wakes, scans for a gateway beacon carrying a config URL, then fetches via HTTP or CoAP. Lowest tag power but highest latency.

ACK and Retransmission

Mode Latency Power Scale
GATT write + ACK low medium 1:1
Broadcast cmd very low low 1:N
Pull fetch high lowest N:1

Retry with exponential backoff (e.g. 1s, 2s, 4s); cap at 3 tries.

Security

  • Sign every command with ECDSA (P-256) using a gateway key; the tag verifies before acting.
  • Use per-tag key derivation `K_i = HKDF(master, tag_id)` so a leaked tag cannot forge others.
  • Reject any `Seq` <= last seen.
  • Rate-limit: ignore more than 1 command per 500 ms per source.

Power Budget for Downlink

A tag that must listen for broadcast commands pays a scan cost: 3 channels at 100% scan ~ 5-8 mA. To stay on a CR2032 for years, scan in windows (e.g. 200 ms every 10 s) -> ~0.1 mA average. Balance responsiveness against battery.

Practical Checklist

  • Pick GATT write for 1:1 maintenance, broadcast for fleet-wide updates.
  • Always sign and sequence commands.
  • Use windowed scanning; never 100% scan on a coin cell.
  • Test replay by re-sending an old captured command — it must be dropped.

The right BLE Tag downlink is invisible to the end user but decides whether your fleet is controllable or just watchable.