The build
Robbert turns an €18 LED corner lamp from Action into a live Victron VRM state of charge display. The result: a 1.40 meter vertical bar in the living room that shows the battery's red minimum SoC threshold at the bottom, the remaining capacity above it, and a small charging animation when solar is coming in. The whole project is designed so non-programmers can replicate it.
What you need
| Item | Price | Notes |
|---|---|---|
| Action 60-LED corner lamp | €18 | Three connectable LED segments, totals 1.40 m |
| Wemos D1 Mini microcontroller | €4 | ESP8266 board, USB-programmable |
| 3D printed base | 0 | Free download in the video description |
| Potentiometer | small | Brightness control on the back |
| USB cable | small | Permanent power input |
The lamp itself is sold at Action and similar discount stores, also available online.
Why it works
The Action lamp uses addressable LED pixels: a controller can drive every LED individually. That is exactly what is needed to map a battery's state of charge onto a vertical bar. The plan:
- Bottom LED is 0% battery
- Top LED is 100% battery
- Below the minimum SoC threshold: red
- Above the threshold: configurable color (default blue, green if you prefer)
- Smooth color fade across the boundary, configurable
- Optional white wave that runs up the bar every 10 seconds while charging
- Brightness dimmable so the lamp can fade into a living room or light it fully
Flashing the firmware (no programming required)
Robbert exported the working code as a .bin file. The flash process happens entirely from a web browser:
- Open the ESP web flasher tool in Chrome
- Plug the Wemos D1 Mini into a USB port
- Click "Connect", select the device
- Select the downloaded .bin file
- Click "Program" and confirm
When the upload finishes, unplug the Wemos. It now runs the Victron lamp firmware.
Removing the original controller
Take the original base off the lamp. Inside is the small controller board that paired with the remote. That board comes out. Three wires remain inside the LED tube:
- Red: 5V power
- Black: ground
- White: data
Lengthen each of the three wires with longer leads. They need to reach the new controller mounted in the printed base.
The 3D-printed base
The original base does not have room for the Wemos. The replacement is printed solid enough to bolt the lamp into, then filled with sand to add weight. Sand-filled keeps print time and filament use down while still keeping the lamp planted on a desk.
Solder the three lengthened wires to the Wemos:
- 5V to the Wemos 5V input
- Ground to the Wemos ground
- Data to D2 (this is the line that drives the LED strip)
Power the Wemos over USB. The bottom LED should start blinking blue, which means the firmware is running and waiting for setup.
Pairing with VRM
Three pieces of information are needed:
- VRM installation ID (six digit number visible in the VRM URL or installation settings)
- Victron account email
- Victron account password
Setup runs through a captive portal:
- On a phone, connect to the WiFi network broadcast by the lamp (named "RTLP floorlamp" or similar)
- Open the configuration page (the phone usually offers "manage router" or similar)
- Enter the home WiFi name and password
- Enter the Victron email and password
- Enter the VRM installation ID
Below those fields are visual settings:
| Setting | Effect |
|---|---|
| Minimum state of charge | The red region. Type 20 if your inverter's minimum is 20%. |
| Main SoC bar color | Color above the red region. Default 9 (blue). 5 is green. |
| Fade pixels | Width of the color transition between red and main. Default 7, around 10 cm. 1 is a hard line. |
| Charge animation | If enabled, a white wave runs over the bar every 10 seconds when the battery is charging. |
Hit save. The Wemos stores the settings and tries to connect. When the strip turns the configured color, the lamp is live and showing real-time SoC from VRM.
Brightness control and factory reset
A potentiometer on the back of the printed base gives manual dimming. Three solder points:
- Plus pin to Wemos 3.3V
- Minus pin to Wemos ground
- Wiper (middle pin) to Wemos A0 (analog input)
The Wemos reads the wiper voltage from 0 to 3.3V and scales the LED intensity. Set the lamp to bright when you want to actually see it across the room, or dim it down to a quiet hint of color on a side table.
The same knob doubles as a factory reset. Turn the potentiometer fully one way, unplug the lamp, plug it back in. The captive portal returns so the WiFi or Victron settings can be reentered. If the knob is left somewhere in the middle and the lamp loses power, it waits a few minutes for someone to log into the portal, then falls back to the previously saved settings.
What it actually shows
Once paired the lamp shows:
- A red segment at the bottom up to the configured minimum SoC
- A configurable color above that, scaled to the current state of charge
- A smooth fade between the two regions
- An optional charging wave
The data path runs over WiFi out to the VRM server and back, which has tradeoffs. Slower than a local connection. Lower data resolution. But the lamp works anywhere with internet: it can sit at the office and show the battery at home, or at home and show a boat battery moored elsewhere. Robbert mentions a planned version 2 that will also support local-network communication for faster updates.
Takeaways
- An off-the-shelf €18 LED lamp can be turned into a polished VRM readout with a €4 microcontroller.
- The web flasher removes the entire Arduino IDE step. Plug in, click Program, done.
- The captive portal makes WiFi and VRM setup feel like configuring a router, not editing code.
- Pulling data through VRM (instead of a local Victron device) means the lamp works from anywhere, at the cost of update speed.







