Skip to content

Join a far-room leaf and heal its path

Observe a leaf join, deliver an injected temperature reading, lose its preferred relay and recover through the other relay.

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-join-and-heal.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 the CSC. It moves leaf 5 into radio range after 30 simulated seconds and pauses at 110 seconds for inspection. Trace its parent arrow.
    You will see
    Run: headless cooja-mesh-join-and-heal.csc; use the step input or filter. Serial: 41934296 ID:5 [INFO: RPL ] parent switch: (NULL IP addr) -> fe80::202:2:2:2 Expected: leaf 5 joins through relay 2, then root 1.
    Why it matters
    Meaning: Joining a route is only one layer of evidence. This RPL association is not Zigbee permit-join or Trust Center authorization. Boundary: This is an injected RPL/IPv6 example, not Zigbee join or physical temperature measurement.
    Step 1: The real joined leaf, both relays and root at the baseline pause. 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
    Filter Mote output for temperature_c. Match the source address and sequence to the sink reception and returning reply.
    You will see
    Run: headless cooja-mesh-join-and-heal.csc; use the step input or filter. Serial: 52212400 ID:1 [INFO: App ] Received request 'temperature_c=21.5 seq=0' from fd00::205:5:5:5 Expected: root receives the injected 21.5 C reading with sequence 0.
    Why it matters
    Meaning: The 21.5 °C value is injected through project-conf.h, not measured by hardware. A useful payload with identity and units adds evidence beyond a parent arrow. Boundary: This is an injected RPL/IPv6 example, not Zigbee join or physical temperature measurement.
    Step 2: Actual temperature payloads, sequences, source address and replies. 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
    Bring Radio messages to the front and compare From/To rows with the reading exchanges. Restore Network afterwards.
    You will see
    Run: headless cooja-mesh-join-and-heal.csc; use the step input or filter. Serial: 47320664 ID:2 [INFO: IPv6 ] Forwarding packet to next hop, dest: fd00::205:5:5:5 Expected: relay 2 forwards toward leaf 5; the GUI frame table is capture-only.
    Why it matters
    Meaning: Keep path evidence separate from application-profile evidence and from physical sensor behavior. Boundary: This is an injected RPL/IPv6 example, not Zigbee join or physical temperature measurement.
    Step 3: Real baseline radio-message rows. 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
    Click Start/Pause to continue from 110 seconds. The script removes the selected relay at 120.549 s. Let the run finish at 240 seconds and inspect Network.
    You will see
    Run: headless cooja-mesh-join-and-heal.csc; use the step input or filter. Serial: FAULT switched_off_relay=2 at_us=120549000 Expected: relay 2 is removed at 120.549 s; leaf 5 must use relay 3.
    Why it matters
    Meaning: The fault removes the actual selected relay. The alternate relay must be reachable for this recovery to work. Boundary: This is an injected RPL/IPv6 example, not Zigbee join or physical temperature measurement.
    Step 4: The final Network graph has relay 3 and the repaired leaf path. 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 ^--|Received ping reply and compare the post-fault status with the baseline. Read the event times from expected-output.txt.
    You will see
    Run: headless cooja-mesh-join-and-heal.csc; use the step input or filter. Serial: 134876272 ID:5 [INFO: RPL ] parent switch: fe80::202:2:2:2 -> fe80::203:3:3:3 Expected: leaf 5 changes from relay 2 to relay 3 after the fault.
    Why it matters
    Meaning: A changed route is a recovery hypothesis. The next reading and reply establish that this application path resumed. Boundary: This is an injected RPL/IPv6 example, not Zigbee join or physical temperature measurement.
    Step 5: Real post-fault route-status rows, including the preferred parent. 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
    In Cooja's Mote output window, filter temperature_c. Locate the first recovered sink reception and the corresponding reply in the full log; retain the missing sequence numbers.
    You will see
    Run: headless cooja-mesh-join-and-heal.csc; use the step input or filter. Serial: 144581400 ID:1 [INFO: App ] Received request 'temperature_c=21.5 seq=9' from fd00::205:5:5:5 Expected: the first recovered reading reaches root at 144.581400 s.
    Why it matters
    Meaning: Record time to useful service, losses and return-path evidence instead of claiming instantaneous whole-mesh repair. Boundary: This is an injected RPL/IPv6 example, not Zigbee join or physical temperature measurement.
    Step 6: At least six final temperature request and reply 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)
  7. 7 Step 7

    Do
    Filter ^--|Received ping reply. Complete the README portfolio record and the host’s four-panel story: join, reading, failure, bounded result.
    You will see
    Run: headless cooja-mesh-join-and-heal.csc; use the step input or filter. Serial: 225663952 ID:5 Received ping reply from fd00::201:1:1:1, len 4, ttl 63, delay 114 ms Expected: the repaired two-hop path returns a 114 ms ping reply.
    Why it matters
    Meaning: Accept this controlled RPL path only. Zigbee commissioning, binding, bridge translation, OTA and Matter need separate evidence. Boundary: This is an injected RPL/IPv6 example, not Zigbee join or physical temperature measurement.
    Step 7: The real post-repair ping with surrounding status rows. The orange ring marks the evidence; the numbered badge is outside it.
    Step 7 · 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 team says its Zigbee deployment is a resilient mesh because several powered nodes are installed. Which first review response is strongest?

    Return to the chapter’s knowledge check
  2. A topology record lists every Zigbee device, but it does not show end-device parents, router responsibilities, or what happens when a planned router is unavailable. What is the correct release decision?

    Return to the chapter’s knowledge check

Caution

This is a Contiki-NG RPL/IPv6/6LoWPAN mesh over simulated IEEE 802.15.4, not Zigbee application profiles, OpenThread or Matter. The temperature is injected and leaf-only is a routing role, not battery-life evidence. No Trust Center, permit-join security, binding, bridge translation or OTA update is simulated.

Return to Zigbee Network Topologies · Browse Labs