# solaresufes/barcos_telemetria architecture

> Architecture diagram of the GitHub repository solaresufes/barcos_telemetria, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-10). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/solaresufes/barcos_telemetria
- Repository: https://github.com/solaresufes/barcos_telemetria

## Overview

This repository combines embedded telemetry firmware, a telemetry API, an engineering dashboard, and a separate inventory application. The main telemetry workflow is device-side battery/sensor acquisition and network transmission, followed by backend route handling and buffering or database access, then dashboard telemetry, recording, analysis, and display. The display firmware separately requests and renders telemetry over ESP-NOW. The README is empty; paths and relationships below rely on the supplied tree and source index/excerpts, so undocumented links between these applications are omitted.

Main entry points: [`Frontend_Telemetria/painel/src/App.tsx`](https://github.com/solaresufes/barcos_telemetria/blob/main/Frontend_Telemetria/painel/src/App.tsx) (Dashboard application), [`ESP_Completo/src/main.cpp`](https://github.com/solaresufes/barcos_telemetria/blob/main/ESP_Completo/src/main.cpp) (Acquisition loop), [`Inventario_Telemetria/src/App.tsx`](https://github.com/solaresufes/barcos_telemetria/blob/main/Inventario_Telemetria/src/App.tsx) (Inventory application), [`Backend_Telemetria/server.js`](https://github.com/solaresufes/barcos_telemetria/blob/main/Backend_Telemetria/server.js) (API server)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_firmware["Embedded devices"]
  node_acquisition["Battery and sensors"]
  node_device_main["Acquisition loop<br/>[main.cpp]"]
  node_device_net["Network sender<br/>[NET.cpp]"]
  node_device_now["ESP-NOW radio<br/>[NOW.cpp]"]
  node_display_main["Display controller<br/>[main.cpp]"]
  node_display_radio["Display radio<br/>[espnow.cpp]"]
  node_display_screen["Display interface<br/>[tela.cpp]"]
end

subgraph group_backend["Telemetry backend"]
  node_backend_entry["API server<br/>[server.js]"]
  node_sensor_routes["Sensor routes<br/>[sensores.js]"]
  node_cell_routes["Cell routes<br/>[celulas.js]"]
  node_alert_routes["Alert routes<br/>[alertas.js]"]
  node_telemetry_buffer["Latest-value buffer<br/>[telemetria.js]"]
  node_backend_store["Supabase client<br/>[supabase.js]"]
end

subgraph group_panel["Engineering dashboard"]
  node_panel_app["Dashboard application<br/>[App.tsx]"]
  node_panel_auth["Authentication<br/>[useAuth.ts]"]
  node_panel_telemetry["Live telemetry<br/>[useTelemetry.ts]"]
  node_panel_recording["Run recording<br/>[useRecording.ts]"]
  node_panel_saved["Saved runs<br/>[useSavedRuns.ts]"]
  node_panel_metrics["Derived metrics<br/>[deriveMetrics.ts]"]
  node_panel_views["Analysis and views"]
  node_panel_admin["Member and presence"]
  node_panel_diary["Diary and graphs"]
  node_panel_store["Dashboard Supabase<br/>[supabase.ts]"]
end

subgraph group_inventory["Inventory application"]
  node_inventory_app["Inventory application<br/>[App.tsx]"]
  node_inventory_auth["Access control<br/>[useAuth.tsx]"]
  node_inventory_data["Inventory data<br/>[useData.tsx]"]
  node_inventory_pages["Inventory and loans"]
  node_inventory_admin["Budget and reports"]
  node_inventory_store["Inventory Supabase<br/>[supabase.ts]"]
end

subgraph group_lora["LoRa firmware"]
  node_lora_tx["LoRa transmitter<br/>[EMISSOR.cpp]"]
  node_lora_rx["LoRa receiver<br/>[RECEPTOR.cpp]"]
end

node_device_actor(("Telemetry device"))
node_dashboard_user(("Engineer or pilot"))
node_inventory_user(("Inventory user"))

node_device_actor -.->|"supplies readings"| node_device_main
node_device_main -->|"reads sensors"| node_acquisition
node_device_main -->|"updates radio data"| node_device_now
node_device_main -->|"sends measurements"| node_device_net
node_device_main -->|"sends alerts and cells"| node_device_net
node_display_main -->|"requests telemetry"| node_display_radio
node_display_main -->|"updates display"| node_display_screen
node_lora_tx -.->|"transmits packets"| node_lora_rx
node_backend_entry -->|"mounts routes"| node_alert_routes
node_backend_entry -->|"mounts routes"| node_cell_routes
node_backend_entry -->|"mounts routes"| node_sensor_routes
node_alert_routes -->|"uses buffer"| node_telemetry_buffer
node_alert_routes -->|"queries database"| node_backend_store
node_cell_routes -->|"uses buffer"| node_telemetry_buffer
node_cell_routes -->|"queries database"| node_backend_store
node_dashboard_user -.->|"uses dashboard"| node_panel_app
node_panel_app -->|"initializes"| node_panel_auth
node_panel_app -->|"initializes"| node_panel_telemetry
node_panel_app -->|"initializes"| node_panel_recording
node_panel_app -->|"initializes"| node_panel_saved
node_panel_app -->|"initializes hooks"| node_panel_admin
node_panel_app -->|"initializes hooks"| node_panel_diary
node_panel_app -->|"derives metrics"| node_panel_metrics
node_panel_app -->|"renders views"| node_panel_views
node_panel_auth -->|"authenticates with"| node_panel_store
node_panel_recording -->|"stores run state"| node_panel_store
node_panel_saved -->|"queries saved runs"| node_panel_store
node_inventory_user -.->|"uses inventory"| node_inventory_app
node_inventory_app -->|"provides access gate"| node_inventory_auth
node_inventory_app -->|"provides data"| node_inventory_data
node_inventory_app -->|"opens app shell"| node_inventory_pages
node_inventory_auth -->|"checks access"| node_inventory_store

click node_acquisition "https://github.com/solaresufes/barcos_telemetria/tree/main/ESP_Completo/lib"
click node_device_main "https://github.com/solaresufes/barcos_telemetria/blob/main/ESP_Completo/src/main.cpp"
click node_device_net "https://github.com/solaresufes/barcos_telemetria/blob/main/ESP_Completo/lib/NET/NET.cpp"
click node_device_now "https://github.com/solaresufes/barcos_telemetria/blob/main/ESP_Completo/lib/NOW/NOW.cpp"
click node_display_main "https://github.com/solaresufes/barcos_telemetria/blob/main/Display_Telemetria/main.cpp"
click node_display_radio "https://github.com/solaresufes/barcos_telemetria/blob/main/Display_Telemetria/espnow.cpp"
click node_display_screen "https://github.com/solaresufes/barcos_telemetria/blob/main/Display_Telemetria/tela.cpp"
click node_lora_tx "https://github.com/solaresufes/barcos_telemetria/blob/main/Lora/lib/EMISSOR/EMISSOR.cpp"
click node_lora_rx "https://github.com/solaresufes/barcos_telemetria/blob/main/Lora/lib/RECEPTOR/RECEPTOR.cpp"
click node_backend_entry "https://github.com/solaresufes/barcos_telemetria/blob/main/Backend_Telemetria/server.js"
click node_sensor_routes "https://github.com/solaresufes/barcos_telemetria/blob/main/Backend_Telemetria/routes/sensores.js"
click node_cell_routes "https://github.com/solaresufes/barcos_telemetria/blob/main/Backend_Telemetria/routes/celulas.js"
click node_alert_routes "https://github.com/solaresufes/barcos_telemetria/blob/main/Backend_Telemetria/routes/alertas.js"
click node_telemetry_buffer "https://github.com/solaresufes/barcos_telemetria/blob/main/Backend_Telemetria/buffer/telemetria.js"
click node_backend_store "https://github.com/solaresufes/barcos_telemetria/blob/main/Backend_Telemetria/supabase.js"
click node_panel_app "https://github.com/solaresufes/barcos_telemetria/blob/main/Frontend_Telemetria/painel/src/App.tsx"
click node_panel_auth "https://github.com/solaresufes/barcos_telemetria/blob/main/Frontend_Telemetria/painel/src/hooks/useAuth.ts"
click node_panel_telemetry "https://github.com/solaresufes/barcos_telemetria/blob/main/Frontend_Telemetria/painel/src/hooks/useTelemetry.ts"
click node_panel_recording "https://github.com/solaresufes/barcos_telemetria/blob/main/Frontend_Telemetria/painel/src/hooks/useRecording.ts"
click node_panel_saved "https://github.com/solaresufes/barcos_telemetria/blob/main/Frontend_Telemetria/painel/src/hooks/useSavedRuns.ts"
click node_panel_metrics "https://github.com/solaresufes/barcos_telemetria/blob/main/Frontend_Telemetria/painel/src/utils/deriveMetrics.ts"
click node_panel_views "https://github.com/solaresufes/barcos_telemetria/tree/main/Frontend_Telemetria/painel/src/components/views"
click node_panel_admin "https://github.com/solaresufes/barcos_telemetria/tree/main/Frontend_Telemetria/painel/src/hooks"
click node_panel_diary "https://github.com/solaresufes/barcos_telemetria/tree/main/Frontend_Telemetria/painel/src/hooks"
click node_panel_store "https://github.com/solaresufes/barcos_telemetria/blob/main/Frontend_Telemetria/painel/src/lib/supabase.ts"
click node_inventory_app "https://github.com/solaresufes/barcos_telemetria/blob/main/Inventario_Telemetria/src/App.tsx"
click node_inventory_auth "https://github.com/solaresufes/barcos_telemetria/blob/main/Inventario_Telemetria/src/hooks/useAuth.tsx"
click node_inventory_data "https://github.com/solaresufes/barcos_telemetria/blob/main/Inventario_Telemetria/src/hooks/useData.tsx"
click node_inventory_pages "https://github.com/solaresufes/barcos_telemetria/tree/main/Inventario_Telemetria/src/pages"
click node_inventory_admin "https://github.com/solaresufes/barcos_telemetria/tree/main/Inventario_Telemetria/src/pages"
click node_inventory_store "https://github.com/solaresufes/barcos_telemetria/blob/main/Inventario_Telemetria/src/lib/supabase.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_acquisition,node_device_main,node_device_net,node_device_now,node_display_main,node_display_radio,node_display_screen,node_inventory_user toneBlue
class node_backend_entry,node_sensor_routes,node_cell_routes,node_alert_routes,node_telemetry_buffer,node_backend_store toneAmber
class node_panel_app,node_panel_auth,node_panel_telemetry,node_panel_recording,node_panel_saved,node_panel_metrics,node_panel_views,node_panel_admin,node_panel_diary,node_panel_store toneMint
class node_inventory_app,node_inventory_auth,node_inventory_data,node_inventory_pages,node_inventory_admin,node_inventory_store toneRose
class node_lora_tx,node_lora_rx,node_device_actor,node_dashboard_user toneIndigo
```

## Components

### Embedded devices

- [Battery and sensors](https://github.com/solaresufes/barcos_telemetria/tree/main/ESP_Completo/lib): `ESP_Completo/lib`
- [Acquisition loop](https://github.com/solaresufes/barcos_telemetria/blob/main/ESP_Completo/src/main.cpp): `ESP_Completo/src/main.cpp`
- [Network sender](https://github.com/solaresufes/barcos_telemetria/blob/main/ESP_Completo/lib/NET/NET.cpp): `ESP_Completo/lib/NET/NET.cpp`
- [ESP-NOW radio](https://github.com/solaresufes/barcos_telemetria/blob/main/ESP_Completo/lib/NOW/NOW.cpp): `ESP_Completo/lib/NOW/NOW.cpp`
- [Display controller](https://github.com/solaresufes/barcos_telemetria/blob/main/Display_Telemetria/main.cpp): `Display_Telemetria/main.cpp`
- [Display radio](https://github.com/solaresufes/barcos_telemetria/blob/main/Display_Telemetria/espnow.cpp): `Display_Telemetria/espnow.cpp`
- [Display interface](https://github.com/solaresufes/barcos_telemetria/blob/main/Display_Telemetria/tela.cpp): `Display_Telemetria/tela.cpp`

### Telemetry backend

- [API server](https://github.com/solaresufes/barcos_telemetria/blob/main/Backend_Telemetria/server.js): `Backend_Telemetria/server.js`
- [Sensor routes](https://github.com/solaresufes/barcos_telemetria/blob/main/Backend_Telemetria/routes/sensores.js): `Backend_Telemetria/routes/sensores.js`
- [Cell routes](https://github.com/solaresufes/barcos_telemetria/blob/main/Backend_Telemetria/routes/celulas.js): `Backend_Telemetria/routes/celulas.js`
- [Alert routes](https://github.com/solaresufes/barcos_telemetria/blob/main/Backend_Telemetria/routes/alertas.js): `Backend_Telemetria/routes/alertas.js`
- [Latest-value buffer](https://github.com/solaresufes/barcos_telemetria/blob/main/Backend_Telemetria/buffer/telemetria.js): `Backend_Telemetria/buffer/telemetria.js`
- [Supabase client](https://github.com/solaresufes/barcos_telemetria/blob/main/Backend_Telemetria/supabase.js): `Backend_Telemetria/supabase.js`

### Engineering dashboard

- [Dashboard application](https://github.com/solaresufes/barcos_telemetria/blob/main/Frontend_Telemetria/painel/src/App.tsx): `Frontend_Telemetria/painel/src/App.tsx`
- [Authentication](https://github.com/solaresufes/barcos_telemetria/blob/main/Frontend_Telemetria/painel/src/hooks/useAuth.ts): `Frontend_Telemetria/painel/src/hooks/useAuth.ts`
- [Live telemetry](https://github.com/solaresufes/barcos_telemetria/blob/main/Frontend_Telemetria/painel/src/hooks/useTelemetry.ts): `Frontend_Telemetria/painel/src/hooks/useTelemetry.ts`
- [Run recording](https://github.com/solaresufes/barcos_telemetria/blob/main/Frontend_Telemetria/painel/src/hooks/useRecording.ts): `Frontend_Telemetria/painel/src/hooks/useRecording.ts`
- [Saved runs](https://github.com/solaresufes/barcos_telemetria/blob/main/Frontend_Telemetria/painel/src/hooks/useSavedRuns.ts): `Frontend_Telemetria/painel/src/hooks/useSavedRuns.ts`
- [Derived metrics](https://github.com/solaresufes/barcos_telemetria/blob/main/Frontend_Telemetria/painel/src/utils/deriveMetrics.ts): `Frontend_Telemetria/painel/src/utils/deriveMetrics.ts`
- [Analysis and views](https://github.com/solaresufes/barcos_telemetria/tree/main/Frontend_Telemetria/painel/src/components/views): `Frontend_Telemetria/painel/src/components/views`
- [Member and presence](https://github.com/solaresufes/barcos_telemetria/tree/main/Frontend_Telemetria/painel/src/hooks): `Frontend_Telemetria/painel/src/hooks`
- [Diary and graphs](https://github.com/solaresufes/barcos_telemetria/tree/main/Frontend_Telemetria/painel/src/hooks): `Frontend_Telemetria/painel/src/hooks`
- [Dashboard Supabase](https://github.com/solaresufes/barcos_telemetria/blob/main/Frontend_Telemetria/painel/src/lib/supabase.ts): `Frontend_Telemetria/painel/src/lib/supabase.ts`

### Inventory application

- [Inventory application](https://github.com/solaresufes/barcos_telemetria/blob/main/Inventario_Telemetria/src/App.tsx): `Inventario_Telemetria/src/App.tsx`
- [Access control](https://github.com/solaresufes/barcos_telemetria/blob/main/Inventario_Telemetria/src/hooks/useAuth.tsx): `Inventario_Telemetria/src/hooks/useAuth.tsx`
- [Inventory data](https://github.com/solaresufes/barcos_telemetria/blob/main/Inventario_Telemetria/src/hooks/useData.tsx): `Inventario_Telemetria/src/hooks/useData.tsx`
- [Inventory and loans](https://github.com/solaresufes/barcos_telemetria/tree/main/Inventario_Telemetria/src/pages): `Inventario_Telemetria/src/pages`
- [Budget and reports](https://github.com/solaresufes/barcos_telemetria/tree/main/Inventario_Telemetria/src/pages): `Inventario_Telemetria/src/pages`
- [Inventory Supabase](https://github.com/solaresufes/barcos_telemetria/blob/main/Inventario_Telemetria/src/lib/supabase.ts): `Inventario_Telemetria/src/lib/supabase.ts`

### LoRa firmware

- [LoRa transmitter](https://github.com/solaresufes/barcos_telemetria/blob/main/Lora/lib/EMISSOR/EMISSOR.cpp): `Lora/lib/EMISSOR/EMISSOR.cpp`
- [LoRa receiver](https://github.com/solaresufes/barcos_telemetria/blob/main/Lora/lib/RECEPTOR/RECEPTOR.cpp): `Lora/lib/RECEPTOR/RECEPTOR.cpp`

### Other components

- **Telemetry device**
- **Engineer or pilot**
- **Inventory user**

## Connections

- Telemetry device → Acquisition loop: supplies readings
- Acquisition loop → Battery and sensors: reads sensors (evidence: `ESP_Completo/src/main.cpp`)
- Acquisition loop → ESP-NOW radio: updates radio data (evidence: `ESP_Completo/src/main.cpp`)
- Acquisition loop → Network sender: sends measurements (evidence: `ESP_Completo/src/main.cpp`)
- Acquisition loop → Network sender: sends alerts and cells (evidence: `ESP_Completo/src/main.cpp`)
- Display controller → Display radio: requests telemetry (evidence: `Display_Telemetria/main.cpp`)
- Display controller → Display interface: updates display (evidence: `Display_Telemetria/main.cpp`)
- LoRa transmitter → LoRa receiver: transmits packets
- API server → Alert routes: mounts routes (evidence: `Backend_Telemetria/server.js`)
- API server → Cell routes: mounts routes (evidence: `Backend_Telemetria/server.js`)
- API server → Sensor routes: mounts routes (evidence: `Backend_Telemetria/server.js`)
- Alert routes → Latest-value buffer: uses buffer (evidence: `Backend_Telemetria/routes/alertas.js`)
- Alert routes → Supabase client: queries database (evidence: `Backend_Telemetria/routes/alertas.js`)
- Cell routes → Latest-value buffer: uses buffer (evidence: `Backend_Telemetria/routes/celulas.js`)
- Cell routes → Supabase client: queries database (evidence: `Backend_Telemetria/routes/celulas.js`)
- Engineer or pilot → Dashboard application: uses dashboard
- Dashboard application → Authentication: initializes (evidence: `Frontend_Telemetria/painel/src/App.tsx`)
- Dashboard application → Live telemetry: initializes (evidence: `Frontend_Telemetria/painel/src/App.tsx`)
- Dashboard application → Run recording: initializes (evidence: `Frontend_Telemetria/painel/src/App.tsx`)
- Dashboard application → Saved runs: initializes (evidence: `Frontend_Telemetria/painel/src/App.tsx`)
- Dashboard application → Member and presence: initializes hooks (evidence: `Frontend_Telemetria/painel/src/App.tsx`)
- Dashboard application → Diary and graphs: initializes hooks (evidence: `Frontend_Telemetria/painel/src/App.tsx`)
- Dashboard application → Derived metrics: derives metrics (evidence: `Frontend_Telemetria/painel/src/App.tsx`)
- Dashboard application → Analysis and views: renders views (evidence: `Frontend_Telemetria/painel/src/App.tsx`)
- Authentication → Dashboard Supabase: authenticates with (evidence: `Frontend_Telemetria/painel/src/hooks/useAuth.ts`)
- Run recording → Dashboard Supabase: stores run state (evidence: `Frontend_Telemetria/painel/src/hooks/useRecording.ts`)
- Saved runs → Dashboard Supabase: queries saved runs (evidence: `Frontend_Telemetria/painel/src/hooks/useSavedRuns.ts`)
- Inventory user → Inventory application: uses inventory
- Inventory application → Access control: provides access gate (evidence: `Inventario_Telemetria/src/App.tsx`)
- Inventory application → Inventory data: provides data (evidence: `Inventario_Telemetria/src/App.tsx`)
- Inventory application → Inventory and loans: opens app shell (evidence: `Inventario_Telemetria/src/App.tsx`)
- Access control → Inventory Supabase: checks access (evidence: `Inventario_Telemetria/src/hooks/useAuth.tsx`)
