Skip to Content

ACRouter — Open-Source Solar Router Controller

Intelligent AC Power Router for Solar Energy Management

OverviewHow It WorksFeaturesHardwareModesQuick Start

GitHub Releases Platform Framework License

The dashboard: live grid/solar/load power, the divert level, and the mode selector — here exporting 1200 W into the load in AUTO.

The dashboard: live grid/solar/load power, the divert level, and the mode selector — here exporting 1200 W into the load in AUTO.


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; factory-calibrated, 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, 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 ⚠️ (high grid draw — don't leave unattended) Fast heating (cheap tariff)
GRID_LIMIT Caps grid draw by current (no export) — advanced, API-only Stay under a supply limit

See Router Modes for details.


Source Code & Firmware

ACRouter is fully open-source. The firmware, documentation, and build configuration are available on GitHub:

Resource Link
Source code github.com/robotdyn-dimmer/ACRouter
Releases & firmware GitHub Releases
Documentation (GitHub) docs/
Report issues GitHub Issues

Pre-built Firmware (v2.0.0)

Download the zip for your target, flash with esptool — see Compilation & Flashing for details.

Profile Target Interfaces Download
ESP32 Full ESP32 HTTP + MQTT + OTA + ESP-NOW ACRouter-v2.0.0-esp32-full.zip
C2-HTTP ESP32-C2 HTTP/REST API only ACRouter-v2.0.0-c2-http.zip
C2-MQTT ESP32-C2 Headless MQTT only ACRouter-v2.0.0-c2-mqtt.zip

Each zip contains a 4-file set (bootloader, partition table, OTA data, application) plus flash offset instructions.


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. (If you change the default I2C pins, that setting is applied by a reboot before the modules can be discovered.)
  3. Power on and connect WiFi — the device starts an access point ACRouter_XXXX (e.g. ACRouter_A1B2); join it, open http://192.168.4.1, give it your home WiFi, then open the external web app (or use serial — no WiFi needed).
  4. Commission (in the app or over REST): discover modules (rescan) → assign roles (rbAmp grid channel + CT model; DimmerLink role=dimmer → auto-binds to a dimmer output) → verify the grid sign under a known load.
  5. Select AUTO and start saving energy. (Assigning role=dimmer drives the output live; a one-time reboot may be needed for the dimmer's status/telemetry to appear.)

The full walkthrough is in the Commissioning guide.


Documentation

Document Description
📖 Overview Architecture & features
🔧 Hardware Guide Modules, wiring, I2C
🔌 Commissioning First-run bring-up
⚙️ Compilation Targets, profiles, build & flash
🎮 Router Modes Mode details
⌨️ Terminal Commands Serial CLI reference
🌐 Web API GET / POST REST endpoints
📐 Sensor Calibration CT models & rbAmp
📡 MQTT Guide Topics & config-over-MQTT
🏠 Home Assistant MQTT integration
📚 Glossary Terms explained

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