Highly Technical
GitHub user Torlando (torlando-tech) developed a bluetooth protocol for Reticulum. The protocol is implemented in Python.
I wanted to kick the tires and determine the interface’s resiliency. My interest in this is that if the protocol works (which I am satisfied it does), then I would then implement a Reticulum interface in C++ and/or Rust to be used on the LilyGo! T-Beam SUPREME and Chad Attermann’s project: microReticulum.
The Raspberry Pi Zero 2W, a $17 board, has bluetooth capability as well as a full Linux operating system (Trixie) and makes an ideal testing platform.
So with ChatGPT, I developed a script which could simulate two users and transmit and receive packets using the Reticulum bluetooth interface. The script succeeded sending “heartbeat” messages to and fro.
Then I began wondering about time. How much time and how quickly can transmissions occur. That, in turn, mandated that I discipline the clocks on the Pi Zeros to my stratum 1 time server so that both have almost identical time. I then stamp when a Reticulum payload is sent and received so I can later calculate how much time it takes. Then comes the big question: what if I swamp the connection by having both senders transmit the text of the United States Constitution to each other; the text is 44k.
I ran both instances with a timeout of 60 seconds and both were able to send the complete text to the other within that time. ChatGPT then created a Perl script which analyzes the times. Here are the results:
(rnsenv) jlpoole@jp /usr/local/src/ble-reticulum $ cat scripts/reticulum_file_transfer_analysis_20260516_1130.txt Reticulum BLE file transfer analysis Generated: 2026-05-16 18:28:23 UTC Input files: /mnt/data/20250516_1115_zerodev1.txt /mnt/data/20250516_1115_zerodev2.txt Log provenance summary: 20250516_1115_zerodev1.txt receiver=zerodev1 date='Sat May 16 11:12:57 PDT 2026' command_lines=15 post_marker_lines=589 20250516_1115_zerodev2.txt receiver=zerodev2 date='Sat May 16 11:12:58 AM PDT 2026' command_lines=14 post_marker_lines=584 Chrony clock notes from logs: 20250516_1115_zerodev1.txt System time : 0.000000009 seconds fast of NTP time System time : 0.000000008 seconds fast of NTP time 20250516_1115_zerodev2.txt System time : 0.000114634 seconds slow of NTP time System time : 0.000105892 seconds slow of NTP time Declared outbound sends observed in logs: sender=zerodev1 file=US_Constitution.txt chunks= 140 bytes= 44225 chunk_data_bytes=316 sender=zerodev2 file=US_Constitution.txt chunks= 148 bytes= 44225 chunk_data_bytes=n/a Direction: zerodev1->zerodev2 file : US_Constitution.txt chunks received : 140 of 140 completeness : 100.00% missing chunks : none duplicate chunks : none payload bytes RX : 44225 first chunk RX : 11:13:18.364 last chunk RX : 11:13:55.318 receiver span : 36.954 s sender span : 14.300 s payload rate RX span : 1196.8 B/s 9574.1 bit/s payload rate TX span : 3092.6 B/s 24741.1 bit/s one-way latency min/median/mean/p95/max/stddev: 244.725 / 12236.420 / 11924.860 / 21922.870 / 22898.637 / 6711.984 ms receiver inter-chunk gap min/median/mean/p95/max/stddev: 149.000 / 243.000 / 265.856 / 340.100 / 732.000 / 62.665 ms sender inter-chunk gap min/median/mean/p95/max/stddev: 101.926 / 102.941 / 102.878 / 104.257 / 107.490 / 0.874 ms Direction: zerodev2->zerodev1 file : US_Constitution.txt chunks received : 148 of 148 completeness : 100.00% missing chunks : none duplicate chunks : none payload bytes RX : 44225 first chunk RX : 11:13:18.267 last chunk RX : 11:13:53.760 receiver span : 35.493 s sender span : 15.482 s payload rate RX span : 1246.0 B/s 9968.2 bit/s payload rate TX span : 2856.6 B/s 22852.9 bit/s one-way latency min/median/mean/p95/max/stddev: 212.914 / 10820.779 / 10497.937 / 19392.748 / 20224.292 / 5938.272 ms receiver inter-chunk gap min/median/mean/p95/max/stddev: 145.000 / 243.000 / 241.449 / 291.700 / 729.000 / 57.537 ms sender inter-chunk gap min/median/mean/p95/max/stddev: 103.946 / 105.794 / 105.317 / 106.740 / 111.933 / 1.353 ms Hello/handshake RX records: zerodev2 -> zerodev1 recv=11:13:18.032 latency= 163.721 ms message='hello' zerodev1 -> zerodev2 recv=11:13:18.034 latency= 103.598 ms message='hello back' Caution: one-way latency assumes sender and receiver clocks are synchronized. Your chronyc tracking output helps bound this error, but it is not a substitute for ACK/round-trip timing. (rnsenv) jlpoole@jp /usr/local/src/ble-reticulum

Access to my Forgejo repository requires registration; the AI bots were flooding the site so I’ve restricted access. Contact me if you wish access.

Leave a Reply