Skip to content

Radio details: battery, airtime, uptime and firmware on the Radio page - #10

Merged
mategogiberidze merged 3 commits into
mainfrom
feature/radio-info
Oct 21, 2026
Merged

mategogiberidze merged 3 commits into
mainfrom
feature/radio-info

Conversation

@mategogiberidze

@mategogiberidze mategogiberidze commented Oct 21, 2026 •

Copy link
Copy Markdown
Owner

What does this change?

Adds a "This radio" card on the Radio page showing the connected radio's:

  • Battery: percent and voltage, or "Plugged in". Shown in the warning colour below 20 %.
  • Channel busy (channel utilization) and Your airtime (air util TX, last hour).
  • Running for (uptime).
  • Hardware, firmware, role, LoRa region and preset, node name and ID.
  • Last update: "Battery and airtime updated N min ago".

How it works:

  • data/repository/RadioInfoRepository takes identity, firmware, role and LoRa region/preset from ownNode and configBundle. Nothing else from the bundle is read, and none of it is logged.
  • Battery and airtime come from device telemetry: telemetry.observe(own node) plus telemetry.requestDevice() every 2 min. That request goes to our own radio only, never over LoRa.
  • data/meshtastic/RadioInfoMapper (pure, unit-tested) builds the app-owned domain/model/RadioInfo, so the UI sees no SDK or protobuf types.
  • Gotcha documented in AGENTS.md: telemetry.observe(NodeId.LOCAL) matches every node's telemetry, so the real own node number is passed instead.

Docs (added 2026-10-22): main merged in, and the website (meshand.app) lists Radio details as a "Next version" feature card (grid now 3 × 3) and in the note below the features; AGENTS.md adds it to the badges to remove at release.

Type of change

  • Bug fix
  • New feature
  • UI / design
  • Docs only
  • Build, CI or refactoring

How was it tested?

  • Unit tests pass: ./gradlew :app:testDebugUnitTest (7 new in RadioInfoMapperTest)
  • Lint has no errors: ./gradlew :app:lintDebug
  • Tried on a real phone with a real radio (not yet). To check: the card appears after connecting, and battery/airtime fill in within about 2 min and match the Meshtastic app.

Checklist

  • Doesn't log channel keys, radio configuration or other secrets
  • Doesn't make MeshAnd transmit anything new to the mesh. The only new request is a telemetry query to our own radio, which stays local.
  • User-visible changes are added to CHANGELOG.md (under "Unreleased")
  • AGENTS.md updated
  • AI tools were used for this change: yes

🤖 Generated with Claude Code

mategogiberidze and others added 3 commits October 22, 2026 00:27
A "This radio" card shows the connected radio's battery (percent and
voltage, or plugged in), channel utilization, own airtime, uptime,
hardware, firmware, role and LoRa region/preset.

- RadioInfoRepository: identity and config from ownNode/configBundle;
  device telemetry from telemetry.observe(own node) plus a local
  requestDevice() every 2 min (addressed to our own radio, no LoRa)
- RadioInfoMapper (pure, unit-tested) builds the app-owned RadioInfo
- AGENTS.md and CHANGELOG updated

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Adds a "Radio details" card with the "Next version" badge (the grid is
now 3 × 3), mentions it in the note below the features, and adds it to
the AGENTS.md list of badges to remove at release.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@claude

claude Bot commented Oct 21, 2026

Copy link
Copy Markdown

Code review

No issues found. Checked for bugs and CLAUDE.md compliance.

@mategogiberidze
mategogiberidze merged commit 28ee598 into main Oct 21, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant