feat: add SD-backed stats archive and dedicated /stats web console
Этот коммит содержится в:
+49
-42
@@ -16,6 +16,7 @@ The tables below are built from the repo's PlatformIO board metadata and variant
|
||||
- `RAM` is the MCU's built-in RAM.
|
||||
- `PSRAM` is extra memory on some boards. More PSRAM usually means more headroom for UI, MQTT, and future features.
|
||||
- `GPS` uses `✅` when present and is blank when absent.
|
||||
- `SD` uses `✅` when the board is currently known to support the SD-backed archive path in EastMesh, `🧪` when the hardware likely supports TF/microSD but the board-specific integration still needs validation, and is blank when there is no current SD/archive support note.
|
||||
|
||||
## Start Here
|
||||
|
||||
@@ -85,51 +86,57 @@ If you are deciding between otherwise similar boards, these target-level setting
|
||||
|
||||
This table includes all repeater MQTT targets currently defined in `variants/eastmesh_mqtt/platformio.ini`.
|
||||
|
||||
| Target | MCU | RAM | PSRAM | Flash | LoRa | Display | GPS |
|
||||
| ------------------------ | ------- | ------ | ----- | ----- | ------ | --------------- | --- |
|
||||
| Ebyte_EoRa-S3 | ESP32S3 | 512 KB | 2 MB | 4 MB | SX1262 | OLED (SSD1306) | |
|
||||
| Generic_E22_sx1262 | ESP32 | 520 KB | No | 4 MB | SX1262 | None | |
|
||||
| Generic_E22_sx1268 | ESP32 | 520 KB | No | 4 MB | SX1268 | None | |
|
||||
| Heltec_ct62 | ESP32C3 | 400 KB | No | 4 MB | SX1262 | None | |
|
||||
| Heltec_E213 | ESP32S3 | 512 KB | 8 MB | 16 MB | SX1262 | E-paper (2.13") | |
|
||||
| Heltec_E290 | ESP32S3 | 512 KB | 8 MB | 16 MB | SX1262 | E-paper (2.9") | |
|
||||
| Heltec_T190 | ESP32S3 | 512 KB | 8 MB | 16 MB | SX1262 | TFT (ST7789) | |
|
||||
| heltec_tracker_v2 | ESP32S3 | 512 KB | No | 8 MB | SX1262 | TFT (ST7735) | ✅ |
|
||||
| Heltec_v2 | ESP32 | 520 KB | No | 8 MB | SX1276 | OLED (SSD1306) | |
|
||||
| Heltec_v3 | ESP32S3 | 512 KB | No | 8 MB | SX1262 | OLED (SSD1306) | ✅ |
|
||||
| heltec_v4 | ESP32S3 | 512 KB | 2 MB | 16 MB | SX1262 | OLED (SSD1306) | ✅ |
|
||||
| heltec_v4_tft | ESP32S3 | 512 KB | 2 MB | 16 MB | SX1262 | TFT (ST7789) | ✅ |
|
||||
| Heltec_Wireless_Paper | ESP32S3 | 512 KB | No | 8 MB | SX1262 | E-paper (2.13") | |
|
||||
| Heltec_Wireless_Tracker | ESP32S3 | 512 KB | No | 8 MB | SX1262 | TFT (ST7735) | ✅ |
|
||||
| Heltec_WSL3 | ESP32S3 | 512 KB | No | 8 MB | SX1262 | None | ✅ |
|
||||
| LilyGo_T3S3_sx1262 | ESP32S3 | 512 KB | 2 MB | 4 MB | SX1262 | OLED (SSD1306) | |
|
||||
| LilyGo_T3S3_sx1276 | ESP32S3 | 512 KB | 2 MB | 4 MB | SX1276 | OLED (SSD1306) | |
|
||||
| LilyGo_TBeam_1W | ESP32S3 | 512 KB | 8 MB | 16 MB | SX1262 | OLED (SH1106) | ✅ |
|
||||
| LilyGo_TDeck | ESP32S3 | 512 KB | No | 16 MB | SX1262 | TFT (ST7789) | ✅ |
|
||||
| LilyGo_Tlora_C6 | ESP32C6 | 512 KB | No | 4 MB | SX1262 | None | |
|
||||
| LilyGo_TLora_V2_1_1_6 | ESP32 | 520 KB | No | 4 MB | SX1276 | OLED (SSD1306) | ✅ |
|
||||
| M5Stack_Unit_C6L | ESP32C6 | 512 KB | No | 4 MB | SX1262 | None | ✅ |
|
||||
| Meshadventurer_sx1262 | ESP32 | 520 KB | No | 4 MB | SX1262 | OLED (SSD1306) | ✅ |
|
||||
| Meshadventurer_sx1268 | ESP32 | 520 KB | No | 4 MB | SX1268 | OLED (SSD1306) | ✅ |
|
||||
| Meshimi | ESP32C6 | 512 KB | No | 4 MB | SX1262 | None | |
|
||||
| nibble_screen_connect | ESP32S3 | 512 KB | No | 4 MB | SX1262 | OLED (SSD1306) | |
|
||||
| RAK_3112 | ESP32S3 | 512 KB | No | 8 MB | SX1262 | None | ✅ |
|
||||
| Station_G2 | ESP32S3 | 512 KB | 8 MB | 16 MB | SX1262 | OLED (SH1106) | ✅ |
|
||||
| Station_G2_logging | ESP32S3 | 512 KB | 8 MB | 16 MB | SX1262 | OLED (SH1106) | ✅ |
|
||||
| T_Beam_S3_Supreme_SX1262 | ESP32S3 | 512 KB | 8 MB | 8 MB | SX1262 | OLED (SH1106) | ✅ |
|
||||
| Tbeam_SX1262 | ESP32 | 520 KB | No | 4 MB | SX1262 | OLED (SSD1306) | ✅ |
|
||||
| Tbeam_SX1276 | ESP32 | 520 KB | No | 4 MB | SX1276 | OLED (SSD1306) | ✅ |
|
||||
| Tenstar_C3_sx1262 | ESP32C3 | 400 KB | No | 4 MB | SX1262 | None | |
|
||||
| Tenstar_C3_sx1268 | ESP32C3 | 400 KB | No | 4 MB | SX1268 | None | |
|
||||
| ThinkNode_M2 | ESP32S3 | 512 KB | No | 4 MB | SX1262 | OLED (SH1106) | |
|
||||
| ThinkNode_M5 | ESP32S3 | 512 KB | No | 4 MB | SX1262 | E-paper (GxEPD) | ✅ |
|
||||
| WHY2025_badge | ESP32C6 | 512 KB | No | 4 MB | SX1262 | None | |
|
||||
| Xiao_C3 | ESP32C3 | 400 KB | No | 4 MB | SX1262 | None | ✅ |
|
||||
| Xiao_C6 | ESP32C6 | 512 KB | No | 4 MB | SX1262 | None | |
|
||||
| Xiao_S3_WIO | ESP32S3 | 512 KB | No | 8 MB | SX1262 | None | ✅ |
|
||||
| Target | MCU | RAM | PSRAM | Flash | LoRa | Display | GPS | SD |
|
||||
| ------------------------ | ------- | ------ | ----- | ----- | ------ | --------------- | --- | -- |
|
||||
| Ebyte_EoRa-S3 | ESP32S3 | 512 KB | 2 MB | 4 MB | SX1262 | OLED (SSD1306) | | |
|
||||
| Generic_E22_sx1262 | ESP32 | 520 KB | No | 4 MB | SX1262 | None | | |
|
||||
| Generic_E22_sx1268 | ESP32 | 520 KB | No | 4 MB | SX1268 | None | | |
|
||||
| Heltec_ct62 | ESP32C3 | 400 KB | No | 4 MB | SX1262 | None | | |
|
||||
| Heltec_E213 | ESP32S3 | 512 KB | 8 MB | 16 MB | SX1262 | E-paper (2.13") | | |
|
||||
| Heltec_E290 | ESP32S3 | 512 KB | 8 MB | 16 MB | SX1262 | E-paper (2.9") | | |
|
||||
| Heltec_T190 | ESP32S3 | 512 KB | 8 MB | 16 MB | SX1262 | TFT (ST7789) | | |
|
||||
| heltec_tracker_v2 | ESP32S3 | 512 KB | No | 8 MB | SX1262 | TFT (ST7735) | ✅ | |
|
||||
| Heltec_v2 | ESP32 | 520 KB | No | 8 MB | SX1276 | OLED (SSD1306) | | |
|
||||
| Heltec_v3 | ESP32S3 | 512 KB | No | 8 MB | SX1262 | OLED (SSD1306) | ✅ | |
|
||||
| heltec_v4 | ESP32S3 | 512 KB | 2 MB | 16 MB | SX1262 | OLED (SSD1306) | ✅ | |
|
||||
| heltec_v4_tft | ESP32S3 | 512 KB | 2 MB | 16 MB | SX1262 | TFT (ST7789) | ✅ | |
|
||||
| Heltec_Wireless_Paper | ESP32S3 | 512 KB | No | 8 MB | SX1262 | E-paper (2.13") | | |
|
||||
| Heltec_Wireless_Tracker | ESP32S3 | 512 KB | No | 8 MB | SX1262 | TFT (ST7735) | ✅ | |
|
||||
| Heltec_WSL3 | ESP32S3 | 512 KB | No | 8 MB | SX1262 | None | ✅ | |
|
||||
| LilyGo_T3S3_sx1262 | ESP32S3 | 512 KB | 2 MB | 4 MB | SX1262 | OLED (SSD1306) | | 🧪 |
|
||||
| LilyGo_T3S3_sx1276 | ESP32S3 | 512 KB | 2 MB | 4 MB | SX1276 | OLED (SSD1306) | | 🧪 |
|
||||
| LilyGo_TBeam_1W | ESP32S3 | 512 KB | 8 MB | 16 MB | SX1262 | OLED (SH1106) | ✅ | ✅ |
|
||||
| LilyGo_TDeck | ESP32S3 | 512 KB | No | 16 MB | SX1262 | TFT (ST7789) | ✅ | 🧪 |
|
||||
| LilyGo_Tlora_C6 | ESP32C6 | 512 KB | No | 4 MB | SX1262 | None | | |
|
||||
| LilyGo_TLora_V2_1_1_6 | ESP32 | 520 KB | No | 4 MB | SX1276 | OLED (SSD1306) | ✅ | |
|
||||
| M5Stack_Unit_C6L | ESP32C6 | 512 KB | No | 4 MB | SX1262 | None | ✅ | |
|
||||
| Meshadventurer_sx1262 | ESP32 | 520 KB | No | 4 MB | SX1262 | OLED (SSD1306) | ✅ | |
|
||||
| Meshadventurer_sx1268 | ESP32 | 520 KB | No | 4 MB | SX1268 | OLED (SSD1306) | ✅ | |
|
||||
| Meshimi | ESP32C6 | 512 KB | No | 4 MB | SX1262 | None | | |
|
||||
| nibble_screen_connect | ESP32S3 | 512 KB | No | 4 MB | SX1262 | OLED (SSD1306) | | |
|
||||
| RAK_3112 | ESP32S3 | 512 KB | No | 8 MB | SX1262 | None | ✅ | |
|
||||
| Station_G2 | ESP32S3 | 512 KB | 8 MB | 16 MB | SX1262 | OLED (SH1106) | ✅ | |
|
||||
| Station_G2_logging | ESP32S3 | 512 KB | 8 MB | 16 MB | SX1262 | OLED (SH1106) | ✅ | |
|
||||
| T_Beam_S3_Supreme_SX1262 | ESP32S3 | 512 KB | 8 MB | 8 MB | SX1262 | OLED (SH1106) | ✅ | ✅ |
|
||||
| Tbeam_SX1262 | ESP32 | 520 KB | No | 4 MB | SX1262 | OLED (SSD1306) | ✅ | |
|
||||
| Tbeam_SX1276 | ESP32 | 520 KB | No | 4 MB | SX1276 | OLED (SSD1306) | ✅ | |
|
||||
| Tenstar_C3_sx1262 | ESP32C3 | 400 KB | No | 4 MB | SX1262 | None | | |
|
||||
| Tenstar_C3_sx1268 | ESP32C3 | 400 KB | No | 4 MB | SX1268 | None | | |
|
||||
| ThinkNode_M2 | ESP32S3 | 512 KB | No | 4 MB | SX1262 | OLED (SH1106) | | |
|
||||
| ThinkNode_M5 | ESP32S3 | 512 KB | No | 4 MB | SX1262 | E-paper (GxEPD) | ✅ | |
|
||||
| WHY2025_badge | ESP32C6 | 512 KB | No | 4 MB | SX1262 | None | | |
|
||||
| Xiao_C3 | ESP32C3 | 400 KB | No | 4 MB | SX1262 | None | ✅ | |
|
||||
| Xiao_C6 | ESP32C6 | 512 KB | No | 4 MB | SX1262 | None | | |
|
||||
| Xiao_S3_WIO | ESP32S3 | 512 KB | No | 8 MB | SX1262 | None | ✅ | |
|
||||
|
||||
Note: all current `repeater_mqtt` boards support the local web panel except `Xiao_C3`, where it is disabled to preserve limited board resources.
|
||||
|
||||
SD notes:
|
||||
|
||||
- `✅` means the board is currently known to work with the SD-backed archive path in EastMesh.
|
||||
- `🧪` means the board hardware likely supports TF/microSD, but the EastMesh board-specific integration still needs validation before it should be treated as supported.
|
||||
- For the current stats archive, a `4 GB` `FAT32` microSD card is more than sufficient. Larger cards are also supported.
|
||||
|
||||
## `companion_radio_wifi` Boards With A Display
|
||||
|
||||
These are the Wi-Fi companion targets that have a display configured for local status, setup help, or occasional direct interaction.
|
||||
|
||||
@@ -62,8 +62,11 @@ Legacy dotted aliases are also accepted:
|
||||
|
||||
- `get web`
|
||||
- `get web.status`: shows whether the local HTTPS panel is available.
|
||||
- `get web.stats.status`: shows whether the dedicated stats page and history subsystem are enabled, whether recent history is active, whether PSRAM-backed history is available, and whether the SD-backed archive is mounted.
|
||||
- `set web on|off`
|
||||
- `set.web on|off`: enables or disables the local HTTPS panel.
|
||||
- `set web.stats on|off`
|
||||
- `set.web.stats on|off`: enables or disables the dedicated `/stats` page and historical stats collection.
|
||||
|
||||
### Runtime Diagnostics
|
||||
|
||||
@@ -87,9 +90,11 @@ That allowlist currently includes:
|
||||
- `get mqtt.status`
|
||||
- `get web`
|
||||
- `get web.status`
|
||||
- `get web.stats.status`
|
||||
- `advert`
|
||||
- `reboot`
|
||||
- `start ota`
|
||||
- `set repeat on|off`
|
||||
- `memory`
|
||||
- `stats-core`
|
||||
- `stats-radio`
|
||||
@@ -117,6 +122,7 @@ That allowlist currently includes:
|
||||
- `get mqtt.letsmesh-us`
|
||||
- `set mqtt.letsmesh-us on|off`
|
||||
- `set web on|off`
|
||||
- `set web.stats on|off`
|
||||
- `get name`
|
||||
- `set name <device-name>`
|
||||
- `get lat`
|
||||
|
||||
+76
-17
@@ -10,12 +10,13 @@ The repeater web panel is a local HTTPS configuration page served directly by th
|
||||
|
||||
It gives you:
|
||||
|
||||
- a password-gated local admin page
|
||||
- a password-gated local admin page at `/app`
|
||||
- a dedicated stats and trends page at `/stats`
|
||||
- quick `get` commands for common repeater and MQTT checks
|
||||
- a terminal-style CLI panel for allowlisted commands
|
||||
- editable repeater settings
|
||||
- editable MQTT settings
|
||||
- a stats dashboard with Wi-Fi, core, radio, memory, and packet views
|
||||
- a historical stats view with trends, neighbours, and recent events
|
||||
|
||||
Operational guidance:
|
||||
|
||||
@@ -78,18 +79,42 @@ Recommended practice for repeater deployments:
|
||||
- use it again for occasional checks or troubleshooting
|
||||
- disable it with `set web off` when finished so MQTT has the most headroom available
|
||||
|
||||
## Actions
|
||||
## Navigation And Actions
|
||||
|
||||
The Actions panel gives you the most common operational controls:
|
||||
The web console now has two main pages:
|
||||
|
||||
- `/app`: lighter-weight control and configuration view
|
||||
- `/stats`: current status, trends, neighbours, and recent events
|
||||
|
||||
Both pages share the same top navigation and utility actions.
|
||||
|
||||
### `/app`
|
||||
|
||||
The `/app` page is the main admin and configuration surface.
|
||||
|
||||
It includes:
|
||||
|
||||
- navigation to `App` and `Stats`
|
||||
- `Advert`
|
||||
- `Start OTA`
|
||||
- `Reboot`
|
||||
- `Logout`
|
||||
- theme toggle
|
||||
- `Logout`
|
||||
|
||||
Use `Start OTA` only when you intend to update firmware.
|
||||
|
||||
### `/stats`
|
||||
|
||||
The `/stats` page is the home for current status and historical visibility.
|
||||
|
||||
It includes:
|
||||
|
||||
- navigation to `App` and `Stats`
|
||||
- `Refresh`
|
||||
- `Reboot`
|
||||
- theme toggle
|
||||
- `Logout`
|
||||
|
||||
## Quick "get" Commands
|
||||
|
||||
This section runs common read-only commands for:
|
||||
@@ -148,19 +173,34 @@ Notes:
|
||||
- you can toggle each MQTT server on or off from this panel
|
||||
- if all three servers are enabled at once, the panel shows a warning recommending two at most
|
||||
|
||||
## Stats
|
||||
## `/stats` Overview
|
||||
|
||||
Press `Get Stats` to load the dashboard.
|
||||
The stats page is loaded separately from `/app` and is intended to keep the main admin page lighter.
|
||||
|
||||
The stats page currently shows:
|
||||
The `/stats` page currently shows:
|
||||
|
||||
- Core
|
||||
- Radio
|
||||
- Memory
|
||||
- Wi-Fi
|
||||
- Packets
|
||||
- `Services`: MQTT, web, archive, card, neighbour count, and archive capacity
|
||||
- `Trends`: battery, heap free, packet activity, and signal
|
||||
- `Neighbours`: current neighbour table
|
||||
- `Events`: current boot/session events
|
||||
|
||||
The dashboard is designed to work well on phones as well as desktop browsers.
|
||||
The trend graphs load sequentially rather than as one large payload:
|
||||
|
||||
1. summary/status
|
||||
2. battery
|
||||
3. memory
|
||||
4. packet activity
|
||||
5. signal
|
||||
|
||||
This keeps browser-side and device-side memory use lower than the previous in-page stats view.
|
||||
|
||||
If `web.stats` is enabled and an SD archive is mounted, trends can restore archived summary points after reboot. Recent live points are still added from in-memory history.
|
||||
|
||||
Useful CLI commands:
|
||||
|
||||
- `set web.stats on`
|
||||
- `set web.stats off`
|
||||
- `get web.stats.status`
|
||||
|
||||
## Mobile Use
|
||||
|
||||
@@ -169,9 +209,9 @@ The page is responsive and should work cleanly on a phone.
|
||||
On mobile:
|
||||
|
||||
- quick command buttons collapse into a two-column layout
|
||||
- action buttons stack more cleanly
|
||||
- top navigation and action groups stay compact and touch-friendly
|
||||
- input rows stay usable for touch interaction
|
||||
- stats cards reorganize into single-column sections where needed
|
||||
- trend cards reorganize into single-column sections where needed
|
||||
|
||||
## Common Tasks
|
||||
|
||||
@@ -180,7 +220,7 @@ On mobile:
|
||||
1. Open the panel.
|
||||
2. Press `wifi.status` in Quick `get` Commands.
|
||||
3. Press `mqtt.status` in Quick `get` Commands.
|
||||
4. Press `Get Stats` for the dashboard view.
|
||||
4. Open `/stats` from the top navigation for the historical stats view.
|
||||
|
||||
### Change Device Name
|
||||
|
||||
@@ -201,6 +241,14 @@ On mobile:
|
||||
2. Confirm the action.
|
||||
3. Continue with your normal OTA workflow.
|
||||
|
||||
### Use Historical Stats
|
||||
|
||||
1. Enable stats if needed with `set web.stats on`.
|
||||
2. Open `/stats` from the top navigation.
|
||||
3. Review `Services` for archive and runtime state.
|
||||
4. Review `Trends` for recent graph history.
|
||||
5. Use `Refresh` to reload the stats page.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### The browser warns about the certificate
|
||||
@@ -241,9 +289,20 @@ The panel intentionally limits what can be run from the browser. Use the serial
|
||||
Try:
|
||||
|
||||
- refreshing the browser tab
|
||||
- using `Refresh` on `/stats`
|
||||
- logging out and back in
|
||||
- checking WiFi stability with `get wifi.status`
|
||||
|
||||
### `/stats` is unavailable
|
||||
|
||||
Check:
|
||||
|
||||
- `get web.status`
|
||||
- `get web.stats.status`
|
||||
- whether `set web.stats on` has been applied
|
||||
|
||||
If `web.stats` is off, `/stats` will stay disabled and the historical graph requests will not run.
|
||||
|
||||
## Related Docs
|
||||
|
||||
- [Custom CLI Commands](./custom-cli.md)
|
||||
|
||||
Ссылка в новой задаче
Block a user