Skip to content

Measure parent choice and radio duty

Compare a leaf-only node’s route and radio duty with always-on CSMA and a scheduled TSCH configuration.

Radio Remi — I trace the measured path and keep application claims separate., your practice guide

Radio Remi — I trace the measured path and keep application claims separate.
Predict the reading, then compare it with the measurement.

Contiki-NG Cooja

Third party Tool

Tier 2 · Free simulator · install required · No account

Version tested: Contiki-NG release/v4.9 c20b12cd, Cooja 4.8 (2022071901), Temurin 17.0.20.1, image sha256:b14d5afb0a2a852d9e72bbed607ead03f6ccc5f4d4dee44f0799110be2f4b609. Date: 2026-09-10.

Download the complete lab packet and follow README.md to run it in the free simulator.

Download the setup and run guide

Get the lab files

Download the complete packet for the simulation and its firmware, or download individual files for inspection. README.md gives the setup and run commands.

  • cooja-mesh-exercises.csc
  • README.md
  • expected-output.txt
  • lab-files.tar.gz

Steps

Screens captured against Contiki-NG Cooja Contiki-NG release/v4.9 c20b12cd, Cooja 4.8 (2022071901), Temurin 17.0.20.1, image sha256:b14d5afb0a2a852d9e72bbed607ead03f6ccc5f4d4dee44f0799110be2f4b609 on 2026-09-10; the tool may have moved on — the text steps are the contract.

  1. 1 Step 1

    Do
    From Cooja's File menu, open cooja-mesh-exercises-csma.csc and let it finish at 300 seconds. Trace the leaf-only node 5 through relay 3 to root 1.
    You will see
    Input: run the 300 s CSMA CSC; inspect leaf 5, relay 3 and root 1. Observed: "241549000 ID:5 -- Preferred parent: fe80::203:3:3:3 (last DTSN: 240)" Expected: parent map 5→3→1 and 85/85 requests accepted by root 1.
    Why it matters
    Meaning: The parent line and run summary agree with the two-hop arrow path. Limit: A leaf-only routing role does not itself switch off the CSMA radio.
    Step 1: The CSMA Network graph has a leaf-only source and two powered relays. The orange ring marks the evidence; the numbered badge is outside it.
    Step 1 · Contiki-NG Cooja; numbered callout added to a real capture. Enlarge screenshot (new tab)
  2. 2 Step 2

    Do
    In Cooja's Mote output window, filter Energest. Read ID:5’s final complete 60-second period and calculate Radio total / Total time.
    You will see
    Input: read leaf 5 Energest period #3 in the CSMA run. Observed: "240971000 ID:5 [INFO: Energest ] Radio Rx : 59964568/ 60000000 (999 permil)" Observed: "240971000 ID:5 [INFO: Energest ] Radio total : 60000000/ 60000000 (1000 permil)" Expected: 60,000,000 / 60,000,000 = 1000 permil, or 100% radio state time.
    Why it matters
    Meaning: The always-on CSMA receiver dominates this period’s radio activity. Limit: State time is an energy proxy, not measured current or battery life.
    Step 2: At least six real Energest lines including CSMA Radio total. The orange ring marks the evidence; the numbered badge is outside it.
    Step 2 · Contiki-NG Cooja; numbered callout added to a real capture. Enlarge screenshot (new tab)
  3. 3 Step 3

    Do
    From Cooja's File menu, open cooja-mesh-exercises.csc, the TSCH variant, and let it finish. Trace the parent arrows and compare delivery.
    You will see
    Input: run the 300 s TSCH CSC on the same topology. Observed: "241549000 ID:5 -- Preferred parent: fe80::203:3:3:3 (last DTSN: 240)" Expected: parent map 5→3→1 and 83/83 requests accepted by root 1.
    Why it matters
    Meaning: The same relay path survives the scheduled-radio configuration. Limit: Association and jitter change attempts within the fixed window; compare delivery ratios.
    Step 3: The real TSCH parent graph after its completed run. The orange ring marks the evidence; the numbered badge is outside it.
    Step 3 · Contiki-NG Cooja; numbered callout added to a real capture. Enlarge screenshot (new tab)
  4. 4 Step 4

    Do
    In Cooja's Mote output window, filter ^--|TSCH|Received ping reply. Inspect rpl-nbr, rpl-status, tsch-schedule and tsch-status in the full log.
    You will see
    Input: inspect leaf 5 RPL/TSCH status and ping to root 1. Observed: "241549000 ID:5 -- Preferred parent: fe80::203:3:3:3 (last DTSN: 240)" Observed: "241549000 ID:5 -- Rank: 413" Observed: "243549000 ID:5 -- Time source: 0003.0003.0003.0003" Observed: "250814616 ID:5 Received ping reply from fd00::201:1:1:1, len 4, ttl 63, delay 265 ms" Expected: relay 3 as parent/time source and a root ping with TTL 63, delay 265 ms.
    Why it matters
    Meaning: Routing parent, clock source and ICMP reply are separate observed checks. Limit: A successful ping does not establish any Zigbee or Thread application behavior.
    Step 4: TSCH association/status rows and the measured root ping. The orange ring marks the evidence; the numbered badge is outside it.
    Step 4 · Contiki-NG Cooja; numbered callout added to a real capture. Enlarge screenshot (new tab)
  5. 5 Step 5

    Do
    In Cooja's Mote output window, filter Energest. Calculate the final ID:5 duty ratio from the raw counts; compare the first interval separately.
    You will see
    Input: compare leaf 5’s first TSCH interval with complete period #3. Observed: "60973020 ID:5 [INFO: Energest ] Radio total : 18940500/ 60002020 (315 permil)" Observed: "240971000 ID:5 [INFO: Energest ] Radio total : 2566500/ 60000000 (42 permil)" Expected: 18,940,500 / 60,002,020 = 315 permil first; 2,566,500 / 60,000,000 = 42 permil later.
    Why it matters
    Meaning: The last fraction is 4.2775%; the log prints whole permil after truncation. Limit: Startup association and observation window affect duty; this is not a battery forecast.
    Step 5: Real TSCH Energest counters with the radio total readout ringed. The orange ring marks the evidence; the numbered badge is outside it.
    Step 5 · Contiki-NG Cooja; numbered callout added to a real capture. Enlarge screenshot (new tab)
  6. 6 Step 6

    Do
    Bring Radio messages to the front. Inspect the frame exchanges, then complete the README exercise ledger and protocol-boundary worksheet.
    You will see
    Input: inspect the TSCH Radio messages capture and match application traffic in serial. Observed: "298904552 ID:1 [INFO: App ] Received request 'hello 26' from fd00::205:5:5:5" Observed: "299044808 ID:5 [INFO: App ] Received response 'hello 26' from fd00::201:1:1:1" Expected: one request from leaf 5 and its reply, within 83/83 root receipts.
    Why it matters
    Meaning: The serial pair confirms application delivery while the capture shows simulated radio frames. Limit: Neither the serial pair nor radio view executes a Zigbee profile, Thread poll or Matter endpoint.
    Step 6: The actual TSCH Radio messages rows. The orange ring marks the evidence; the numbered badge is outside it.
    Step 6 · Contiki-NG Cooja; numbered callout added to a real capture. Enlarge screenshot (new tab)

Chapter checks

These questions refer to the chapter’s examples. Use the return links to review their answers.

  1. A Zigbee device has joined the network and its packets route correctly. What has that NOT yet proven?

    Return to the chapter’s knowledge check
  2. In the Zigbee application model, what is the relationship between endpoints, clusters, and attributes?

    Return to the chapter’s knowledge check

Caution

This is real Contiki-NG RPL/6LoWPAN over simulated IEEE 802.15.4 radios. TSCH scheduled radio duty is not Zigbee or Thread sleepy-child polling, and leaf-only does not automatically sleep. No Zigbee application profile, binding, bridge, OTA, OpenThread or Matter stack runs here; radio counters do not prove battery life.

Return to Zigbee Application Profiles · Browse Labs