How lem-d/canairy works
Canairy is a worker-safety monitoring system: wearable gas/SOS readings travel by RF to an Arduino receiver, then over USB through a Python bridge to a live React supervisor dashboard. The dashboard tracks worker status and history, prioritizes alerts, and provides worker and worksite views. The README documents the end-to-end hardware and WebSocket workflow; source-index references and excerpts support the shown software calls. Firmware internals and several bridge/dashboard details were not sampled, so those links are limited to documented relationships.
Main entry points: App.js Dashboard coordinator · WorkerDetail.js Worker detail · bridge.py Bridge service · useWorkers.js Worker connection
Components 22
Wearable and receiver
- Wearable sensing
src/wearable/wearable.ino - RF receiver
src/receiver/receiver.ino
Bridge ingestion
- Serial reader
bridge/serial_reader.py - Line parser
bridge/line_parser.py - Worker simulator
bridge/simulator.py - Worker names
bridge/workers.py - Bridge service
bridge/bridge.py
Live dashboard
- Worker connection
canairy-dashboard/src/hooks/useWorkers.js - Dashboard coordinator
canairy-dashboard/src/App.js - Dashboard settings
canairy-dashboard/src/config.js - Worker presentation logic
canairy-dashboard/src/lib.js
Safety views and data
- Event history
canairy-dashboard/src/hooks/useEventLog.js - Alert banner
canairy-dashboard/src/components/AlertBanner.js - Worker cards
canairy-dashboard/src/components/WorkerCard.js - Worker detail
canairy-dashboard/src/components/WorkerDetail.js - Worksite overview
canairy-dashboard/src/components/Worksite.js - Worker logs
canairy-dashboard/src/components/WorkerLogs.js - Gas gauge
canairy-dashboard/src/components/Gauge.js - SOS indicator
canairy-dashboard/src/components/SosTriangle.js - Trend bars
canairy-dashboard/src/components/Bars.js
Other components
- Field worker
- Supervisor
Connections 29
- Field worker → Wearable sensing: wears
README.MD - Wearable sensing → RF receiver: sends RF
README.MD - RF receiver → Serial reader: streams USB
README.MD - Serial reader → Line parser: parses lines
bridge/serial_reader.py - Serial reader → Bridge service: reports readings
bridge/bridge.py - Worker simulator → Worker names: uses names
bridge/simulator.py - Worker simulator → Bridge service: supplies readings
bridge/bridge.py - Worker names → Bridge service: names workers
bridge/bridge.py - Bridge service → Supervisor: serves WebSocket
README.MD - Supervisor → Worker connection: opens dashboard
README.MD - Worker connection → Bridge service: receives snapshots
README.MD - Dashboard coordinator → Worker connection: loads worker data
canairy-dashboard/src/App.js - Dashboard coordinator → Event history: tracks events
canairy-dashboard/src/App.js - Dashboard coordinator → Alert banner: renders alerts
canairy-dashboard/src/App.js - Dashboard coordinator → Worker cards: renders workers
canairy-dashboard/src/App.js - Dashboard coordinator → Worker detail: renders selection
canairy-dashboard/src/App.js - Dashboard coordinator → Worksite overview: renders overview
canairy-dashboard/src/App.js - Worksite overview → Worker logs: renders logs
canairy-dashboard/src/components/Worksite.js - Worksite overview → Trend bars: renders trend
canairy-dashboard/src/components/Worksite.js - Worker cards → Gas gauge: renders gauge
canairy-dashboard/src/components/WorkerCard.js - Worker cards → SOS indicator: renders SOS
canairy-dashboard/src/components/WorkerCard.js - Worker detail → Gas gauge: renders gauge
canairy-dashboard/src/components/WorkerDetail.js - Worker detail → SOS indicator: renders SOS
canairy-dashboard/src/components/WorkerDetail.js - Worker detail → Trend bars: renders history
canairy-dashboard/src/components/WorkerDetail.js - Worker detail → Event history: displays events
canairy-dashboard/src/components/WorkerDetail.js - Worker logs → Event history: summarizes events
canairy-dashboard/src/components/WorkerLogs.js - Worker connection → Dashboard settings: reads connection settings
canairy-dashboard/src/hooks/useWorkers.js - Dashboard coordinator → Worker presentation logic: derives worker views
canairy-dashboard/src/App.js - Worker presentation logic → Dashboard settings: reads site settings
canairy-dashboard/src/lib.js