ACRouter — Open-Source Solar Router Controller
Intelligent AC Power Router for Solar Energy Management
Overview • How It Works • Features • Hardware • Modes • Quick Start
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:
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
- Flash the firmware for your target/profile (ESP32, C2-HTTP, or C2-MQTT) — see Compilation.
- Wire the rbAmp and DimmerLink modules to the host's I2C bus (with pull-ups) — see the Hardware Guide.
- Power on and connect WiFi, then set the external web-app URL and open the app.
- Commission (in the app or over REST): discover modules (rescan) → assign roles (rbAmp
gridchannel + CT model; DimmerLinkrole=dimmer→ auto-binds to dimmer id 4). - 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.
- 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