Protocols
shoal speaks three layers of comms: acoustic across the fleet, optical at the dock, and standard IP from the dock to the cloud. All three are open standards, end-to-end.
Acoustic (always-on, fleet-wide)
Layer 0 — JANUS / STANAG 4748. NATO open standard for underwater acoustic comms. 80 bps baseline at 11.5 kHz. 64-bit packets, 34 bits user-defined. The lingua franca.
Layer 1 — shoal-link. Defined on top of JANUS user bits:
- Discovery: fish-to-dock and fish-to-fish presence
- Heartbeat: 1 packet per minute per fish (battery, MFC output, depth, dead-reckoned position)
- Distress: low-battery, stuck, lost, anomaly
- Command: dock-to-fish, operator-to-fish via dock
Layer 2 — shoal-mesh. Optional multi-hop relay through other fish for distant fish to reach the dock. Inspired by janus-consensus.
Optical (dock-local, high-rate)
Layer 0 — Blue-green LED + PIN photodiode. OOK at 1–10 Mbps, ~10 m line-of-sight at the bay.
Layer 1 — shoal-burst. Bulk data offload when a fish docks:
- Telemetry log dump (typically <10 MB per visit)
- Sensor data — camera frames, full electrochem traces
- Updated mission parameters and model weights pushed to the fish
- Software updates
Surface (dock-to-cloud)
LTE, satellite, or hardwired. Standard IoT patterns. Telemetry → cloud time-series DB. Pollution maps → tile server. Dashboard → web app.
Data schemas
Public schemas for water quality data, designed for interop with:
- OGC SensorThings API — open sensor data interchange
- OGC WaterML 2.0 — hydrology-specific
- EPA Water Quality Exchange (WQX) — US regulatory reporting
Every fish observation lands in a versioned, signed, append-only log.