Skip to content

Add Inhero MR2 board variant (nRF52840/RAK4630 solar repeater) - #3132

Draft
liekmarflow wants to merge 2 commits into
meshcore-dev:devfrom
liekmarflow:feature/inhero-mr2-variant
Draft

Add Inhero MR2 board variant (nRF52840/RAK4630 solar repeater)#3132
liekmarflow wants to merge 2 commits into
meshcore-dev:devfrom
liekmarflow:feature/inhero-mr2-variant

Conversation

@liekmarflow

@liekmarflow liekmarflow commented Aug 8, 2026

Copy link
Copy Markdown

Closes #3130. Builds on #3131 (board hooks) — the diff shows that commit as
well until it lands; I will rebase and mark this ready once it does.

Adds the Inhero MR2, a purpose-built solar repeater platform that is in
production and shipping:
https://shop.inhero.de/en/products/inhero-mr-2-solar-mesh-repeater-board-rak4630-sx1262-mppt-red-ce-gepruft
I am the hardware manufacturer; I can test changes on real hardware and am
happy to be tagged on anything affecting this variant.

Where the code lives: the MR2's logic sits entirely in the variant. This
PR's own commit is 32 new files — boards/inhero_mr2.json plus everything
under variants/inhero_mr2/ — and leaves every existing file untouched. Of
its 6496 lines, 454 are board and build definitions; the rest is device code:
BQ25798 and INA228 drivers, battery chemistry profiles, JEITA charge control,
SOC accounting, low-voltage sleep. The core changes visible in the diff are
#3131's two no-op hooks; the board.* CLI rides on the existing
MainBoard::handleCommand() hook.

Hardware: RAK4630 (nRF52840 + SX1262), BQ25798 buck/boost charger with
universal 3.6-24 V solar input and MPPT, INA228 coulomb counter, RV-3028
RTC, BME280, 45 x 40 mm, CE-certified (RED 2014/53/EU).

What the variant provides:

  • Battery chemistry profiles (Li-ion, LiFePO4, LTO, Na-ion) with JEITA
    temperature-controlled charging and per-chemistry low-voltage thresholds,
    all configurable at runtime over the CLI and persisted across reboots
  • An operator-controlled override that keeps charging below the JEITA cold
    limit for frost-period solar sites, bounded by a static gate of 0.05C of
    the stated battery capacity (set board.jeitaignore, off by default)
  • SOC tracking via hardware coulomb counting, 7-day energy statistics and
    a time-to-live prediction
  • Low-voltage system sleep (<500 uA) with RTC wakeup and autonomous recovery
  • board.* CLI namespace for configuration and diagnostics; the full
    documentation set (EN/DE) is maintained in the vendor fork, linked from
    variants/inhero_mr2/README.md
  • Build environments: Inhero_MR2_repeater,
    Inhero_MR2_repeater_bridge_rs232, Inhero_MR2_sensor

Field record: I run a part of the MeshCore repeater infrastructure for a
region in Saxony, Germany — hilltop and mining-tower sites with links from
70 km to over 100 km, plus a number of small birdhouse-style nodes. Almost
all of them are MR2 by now, so this board already carries a significant share
of the MeshCore traffic here.

A representative small node, read out of the MeshCore app on 2026-08-19:
123 days of continuous uptime on solar, 701,487 packets sent and 2,003,527
received, 4 d 20 h of TX airtime (596 ms per packet, one packet every 15 s
on average), 35 % forward ratio, battery still at 100 %. Measured
consumption in real repeater operation is ~0.98 Wh/day.

Another unit ran 140 days before it surfaced a charge-accounting bug; that
bug is reproduced, verified on two battery chemistries, and fixed in this
branch.

Background on the design and the field failures that drove it:
https://shop.inhero.de/en/blogs/news/warum-es-das-mr2-gibt

Build and docs: all three variant environments build green, as does
RAK_4631_repeater from the PR build-check matrix. The documentation set was
verified against the code (CLI replies, thresholds, register values) before
submission.

Transparency: this variant was developed with AI assistance under my
continuous engineering direction and review, followed by a full
pre-submission review pass. Stated upfront in line with this project's
position on code provenance. I manufacture this board and run it in the
field; I will keep the variant building and correct, and I am happy to be
tagged on anything that touches it.

@liekmarflow liekmarflow changed the title Feature/inhero mr2 variant Add Inhero MR-2 board variant (nRF52840/RAK4630 solar repeater) Aug 8, 2026
liekmarflow added a commit to liekmarflow/MeshCore that referenced this pull request Aug 8, 2026
…ev#3131/meshcore-dev#3132) - CONTEXT.md getrackt

Stand-Block neu: Issue + beide PRs mit Branch-Zeigern und Naechster-Schritt-
Ablauf nach Merge von meshcore-dev#3131. Ueberholte Doktrin ('kein PR-Verkehr zu
upstream') entfernt; stattdessen die Sicherungsregel: PR-Branches immer von
upstream/main schneiden. Feature-Branches als live PR-Koepfe markiert
(nicht loeschen). CONTEXT.md aus .gitignore genommen - auf main getrackt
ist sie PR-sicher, weil PR-Branches nie von Fork-main abstammen.
@liekmarflow
liekmarflow force-pushed the feature/inhero-mr2-variant branch from fd7274b to 4ec5a55 Compare August 9, 2026 19:22
@liekmarflow
liekmarflow force-pushed the feature/inhero-mr2-variant branch 2 times, most recently from 7f81a00 to 114eda0 Compare August 16, 2026 06:10
@liekmarflow liekmarflow changed the title Add Inhero MR-2 board variant (nRF52840/RAK4630 solar repeater) Add Inhero MR2 board variant (nRF52840/RAK4630 solar repeater) Aug 16, 2026
@liekmarflow
liekmarflow force-pushed the feature/inhero-mr2-variant branch 2 times, most recently from bd8a5c7 to 732262c Compare August 21, 2026 16:49
liekmarflow added a commit to liekmarflow/MeshCore that referenced this pull request Aug 21, 2026
… of the story

The "Relation to upstream" section still described the variant as a
standalone out-of-tree product fork. That has not been true since
2026-08-08: meshcore-dev#3130 (hardware request), meshcore-dev#3131 (board hooks) and meshcore-dev#3132 (the
variant itself) are open upstream, and the fork releases are the interim
until those land.

It also left the April withdrawal unexplained. The board was not available
yet and CE certification was still in progress; both are settled now, which
is the reason the variant is being proposed again.
@liekmarflow
liekmarflow changed the base branch from main to dev August 26, 2026 17:43
Two no-op virtuals on MainBoard, so a variant can do these things
without core changes:

- tick(): called from the simple_repeater and simple_sensor main loops.
  Lets a board feed its watchdog and run periodic housekeeping.
- queryBoardTelemetry(CayenneLPP&): simple_repeater asks the board for
  extra telemetry channels, gated by TELEM_PERM_ENVIRONMENT.

Variant-specific CLI is already covered by MainBoard::handleCommand(),
so this adds nothing for that.

Both defaults are no-ops, so existing variants build and behave
unchanged. Used by the Inhero MR2 variant (separate PR).
Application-specific repeater platform for autonomous off-grid
operation, in production and field-deployed:

- RAK4630 core module (nRF52840 + SX1262), 45 x 40 mm
- BQ25798 buck/boost charger: universal solar input 3.6-24V with MPPT,
  JEITA temperature-controlled charging
- INA228 coulomb counter for SOC tracking and 7-day energy statistics
- Li-ion, LiFePO4, LTO and Na-ion battery chemistry profiles
- RV-3028 RTC wakeup with low-voltage system sleep (<500uA) and
  autonomous recovery
- BME280 environment telemetry
- board.* CLI namespace for configuration and diagnostics, dispatched
  through MainBoard::handleCommand()
- slim variant README; the full documentation set (EN/DE) is
  maintained in the vendor fork

Build environments: Inhero_MR2_repeater, Inhero_MR2_repeater_bridge_rs232,
Inhero_MR2_sensor.
@liekmarflow
liekmarflow force-pushed the feature/inhero-mr2-variant branch from 0701fa0 to 0e274c4 Compare August 28, 2026 13:26
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.

[Feature request] Hardware support: Inhero MR-2 (CE-certified BQ25798/RAK4630 based solar repeater board)

1 participant