Motivation
With the acquisition of our first electric vehicle, the need for a reliable home charging solution became unavoidable. While the market offers a wide range of wallboxes, many solutions are either overpriced, lack transparency, or rely on proprietary ecosystems that limit integration into existing home automation systems.
Especially advanced features such as dynamic load management and optimized charging based on self-produced photovoltaic energy are often locked behind closed platforms or require additional paid services. The goal of this project was therefore to design a fully customizable, cost-effective wallbox that integrates seamlessly into an existing Home Assistant setup and allows complete control over charging behavior.
System Design
The wallbox is tightly integrated into the existing home automation infrastructure, including a smart energy meter for grid import/export and photovoltaic inverters. All components communicate via Ethernet and are supervised by a Home Assistant server.
The core hardware components of the wallbox are:
- Arduino UNO with W5100 Ethernet shield for control logic and network communication
- Pulsares EV SimpleCharge controller for EV communication and charging control
- Multiple power contactors for dynamic phase selection (1-3 phase charging)
- Main charging contactor to safely enable and disable the charging process
- Relay modules for switching the charging controller and auxiliary components
- Energy meter for real-time power measurement and load management feedback
- Minimal local user interface with essential buttons and status LEDs
- Plug holder with integrated switch to detect connector removal and fully disconnect power when idle
Control & Load Management
The wallbox itself does not implement any charging logic. It acts purely as an execution layer that applies a predefined charging level received from Home Assistant. All decisions regarding charging behavior are made at system level, where complete information about household load, photovoltaic production and grid constraints is available.
Home Assistant communicates a single numeric charging stage to the wallbox via MQTT over Ethernet. A charging stage of 0 disables charging entirely. All other stages map to fixed current levels and phase configurations. Single-phase charging was deliberately omitted, as very low charging power was not required in practice and would introduce unnecessary efficiency losses.
The implemented charging stages cover:
- Two-phase charging with current levels between 6 A and 13 A
- Three-phase charging with current levels between 6 A and 13 A
The selected charging stage is translated by the Arduino into a PWM control signal and forwarded to the SimpleCharge controller. Phase selection and contactor switching are handled deterministically based on the received stage, without any local optimization or decision-making.
In addition to command reception, the wallbox reports system states back to Home Assistant. These include charging active/inactive status, plug holder state and measured charging power. This feedback allows Home Assistant to verify correct execution and to log all charging sessions.
In case of a communication loss with Home Assistant, the wallbox signals the fault locally via a dedicated status LED inside the control cabinet. A physical selector switch allows switching to a manual fallback mode. In this mode, the wallbox operates autonomously with a fixed charging power and starts charging automatically when a vehicle is plugged in. This ensures basic operability even without network connectivity.
All safety-critical functions, including connector locking and maximum allowable current, are enforced by the charging controller hardware itself. This guarantees that safety limits remain active independently of the higher-level control system.
Lessons Learned
- Microcontroller switching of contactors requires RC snubbers and careful sequencing to prevent spikes or resets. Physical separation from high-current enclosures protects the electronics from noise.
- Keeping the wallbox simple and centralizing logic in Home Assistant works best: safety-critical functions stay local, while all adaptability happens at the automation layer.
- Clear separation reduces complexity, allows future upgrades, and ensures predictable operation. Local feedback and manualoverride remain essential.