Skip to Content

Contents | Next: ChangeLog →

ACRouter — Open-Source Solar Router Controller

Intelligent AC Power Router for Solar Energy Management

OverviewHow It WorksFeaturesHardwareModesQuick Start

Platform Framework License Status


What is ACRouter?

ACRouter is an open-source controller that automatically redirects excess solar energy to resistive loads (like water heaters) via smooth phase-angle dimming — instead of exporting it to the grid. It maximizes self-consumption of your solar power and reduces electricity costs.

Why ACRouter?

Problem Solution
Excess solar exported to the grid at low rates Route it to heat water or other loads
Expensive battery storage Use thermal storage (water heater) instead
Complex commercial solutions Simple, open-source, DIY-friendly
Fixed on/off control wastes energy Smooth phase-angle dimming for precise control

Typical daily behavior of a grid-connected PV system with a water-heater load:

Parameter Without ACRouter With ACRouter
Daytime solar export High Low
Self-consumption ratio ~40–50% ~70–85%
Water heating source Grid (evening/night) Solar surplus (daytime)
Battery required Yes (for storage) No
Energy exported/wasted Significant Minimal
Overall energy cost Higher Lower (up to ~30% less)

Figures are typical estimates and vary with your installation (PV size, load, tariffs, and usage).


How It Works

A v2.0 system is an ESP32-family host plus smart I2C modules:

plaintext
rbAmp (I2C)  ──▶  sensor_hub  ──▶  RouterController  ──▶  DimmerLink (I2C)  ──▶  load
  measures grid    merges the       decides how much     phase-cut output       (heater)
  (+ solar/load)   sources          to divert (grid→0)    (dimmer id 4)

The rbAmp module measures grid power (and optionally solar/load), the RouterController runs a ~5 Hz balancing loop, and the DimmerLink module drives the load — raising or lowering it so the grid exchange trends to zero. All the surplus is consumed locally instead of exported.


Features

  • Smart measurement (rbAmp). Clamp-on CT current + line voltage over I2C; self-calibrating, no ADC tuning. Grid / solar / load channels.
  • Smart dimming (DimmerLink). Phase-angle 0–100% on a dedicated controller; zero-cross handled in the module.
  • Seven operating modes for grid-tied, export-protection, off-grid, and manual scenarios.
  • External web app — capability-aware UI (the device redirects to it).
  • REST API + WebSocket, MQTT + Home Assistant auto-discovery, OTA (ESP32 tier).
  • Two targets — ESP32 (full) and low-cost ESP32-C2, with capability-aware feature gating.
  • Configurable & persistent — settings in NVS; configure via web app, REST, MQTT, or serial.
  • Open source.

Hardware

ACRouter v2.0 uses a modular architecture: an ESP32 or ESP32-C2 host plus rbAmp (measurement) and DimmerLink (dimmer) modules sharing one I2C bus.

Part Role
ESP32 / ESP32-C2 host Runs the firmware, control loop, connectivity
rbAmp Grid/solar/load current + line voltage sensing (clamp-on CT)
DimmerLink Phase-cut dimmer driving the resistive load

Minimum build: one host + one rbAmp (with a grid channel) + one DimmerLink. Wiring, addresses, CT models, and pull-ups are covered in the Hardware Guide.

ACRouter is designed to work with modules from rbdimmer.com and open-source DIY hardware.


Operating Modes

Mode Behavior Best For
OFF Dimmer at 0%, no regulation Maintenance
AUTO Balances P_grid → 0 (consumes all surplus) Standard solar routing
ECO Avoids grid import; allows export Export OK, avoid paid import
OFFGRID Runs only on solar; ignores grid Off-grid systems
MANUAL Fixed user level Testing / scheduling
BOOST 100% output Fast heating (cheap tariff)
GRID_LIMIT Caps grid draw by current (no export) Stay under a supply limit

See Router Modes for details.


Quick Start

  1. Flash the firmware for your target/profile (ESP32, C2-HTTP, or C2-MQTT) — see Compilation.
  2. Wire the rbAmp and DimmerLink modules to the host's I2C bus (with pull-ups) — see the Hardware Guide.
  3. Power on and connect WiFi, then set the external web-app URL and open the app.
  4. Commission (in the app or over REST): discover modules (rescan) → assign roles (rbAmp grid channel + CT model; DimmerLink role=dimmer → auto-binds to dimmer id 4).
  5. Reboot once — this starts the DimmerLink polling (and applies any I2C-pin change). Roles are saved live, but the first dimmer needs this one-time reboot before it drives the load.
  6. Select AUTO and start saving energy.

The full walkthrough is in the Commissioning guide.


Documentation

Document Description
📖 Overview Architecture & features
🔧 Hardware Guide Modules, wiring, I2C
⚙️ Compilation Targets, profiles, build & flash
🎮 Router Modes Mode details
🌐 Web API REST endpoints
🏠 Home Assistant MQTT integration

Safety

⚠️ This project involves mains voltage (110 V / 230 V AC).

  • Installation by a qualified electrician; de-energize before wiring.
  • Proper isolation, fusing, and RCD/GFCI protection; keep low-voltage I2C wiring away from mains.
  • Resistive loads only (heating elements) — not motors, transformers, LED drivers, or electronics.

What ACRouter Is Not

  • Not a battery inverter · not a smart plug/relay controller · not a certified grid-protection device · not for inductive or electronic loads.

Contributing

Contributions welcome — report bugs, suggest features, improve docs, or submit code via pull request on GitHub.


License

ACRouter is open-source software. See LICENSE for details.


Acknowledgments

  • rbAmp / DimmerLink — smart sensing & dimmer modules (rbdimmer.com)
  • ESP-IDF — Espressif IoT Development Framework
  • ArduinoJson — JSON library for embedded systems
  • Community — contributors and testers

Made with ⚡ for the solar energy community

⭐ Star this project🐛 Report Issue💬 Discuss

Contents | Next: ChangeLog →