For the complete documentation index, see llms.txt. This page is also available as Markdown.

Verify the First Downlink

Send a first MIOTY downlink from KiloCenter to a bidirectional endpoint and then check the delivery result.

A downlink lets your application send a message back through KiloCenter to a bidirectional MIOTY endpoint. Use this guide to queue the device-compatible payload and inspect the reported delivery result, completing the return path of the network connection.

First verify an uplink from the registered endpoint. Both the endpoint and base station must support bidirectional communication. Acceptance into the downlink queue is not delivery confirmation, and delivery confirmation alone does not prove that a physical action occurred. Check device feedback when the payload requests a state change.

What does this guide achieve?

Queue a downlink command to an endpoint and verify the result.

Prerequisites

  • Endpoint registered with bidirectional flag enabled

  • Base station connected and supporting bidirectional communication

  • At least one successful uplink confirmed (see Verify First Uplink)

Both the endpoint and the base station must have bidirectional capability for downlinks to work.

  1. Open KC-Web at http://localhost/ (container) or http://localhost:5173 (source dev).

  2. Open End Points, select your bidirectional endpoint and open the Downlink tab.

  3. Compose the downlink:

    • Payload (hex): the user data as hex (e.g. 01020304); leave it empty for an acknowledgement-only downlink

    • Format and Priority (prio), and under Advanced Options the responseExp, responsePrio, dlWindReq, expOnly and dlRxStatQry flags

    • Counter Dependent, which binds the downlink to a packet counter

  4. Select Send Downlink. The downlink appears under the endpoint's Traffic tab > Downlink Queue; while no base station has taken it yet you can edit or revoke it there.

The Downlink tab with Payload hex, Format, Priority, Counter Dependent, Advanced Options and Send Downlink

In the JSON form of a gRPC request, payloads entries are base64 (AQIDBA== is bytes 01 02 03 04).

Verify the Result

In KC-Web

Open Traffic (in the navigation, or the endpoint's Traffic tab) and select Downlink Results. A result shows result (sent, expired or invalid), and for a sent downlink the transmitting bsEui, txTime and packetCnt; dlAck shows when the endpoint acknowledged it in its next uplink. Downlink Queue shows the downlinks still waiting for a transmission window.

Downlink Results listing sent downlinks with the time each was acknowledged

In Logs

Look for dlDataQue, dlDataQueRsp, and dlDataQueCmp entries -- these represent the three-way handshake of the downlink operation.

Troubleshooting

Symptom
Likely Cause

Downlink stays queued

The base station that last heard the endpoint is offline or not bidirectional; the downlink goes out in the endpoint's next downlink window

Downlink refused as not bidirectional

The endpoint is registered without the bidi flag

Downlink reported expired

No downlink window opened within protocol.downlink_expiry.lifetime (see How do I configure KiloCenter?)

Downlink stays Revoking in the queue

A base station held it when its deadline passed; it ends when the station answers the revoke or reconnects. If the station refuses revokes with a code other than protocol.downlink_expiry.revoke_not_held_codes, see How do I configure KiloCenter?

No result returned

Base station did not complete the downlink handshake

Payload rejected

Data not valid base64 or exceeds maximum payload size

Last updated