An €18 Action floor lamp turned into a live Victron state of charge display

Energy Storage
Written byRoel AdriaansBased on findings byRobbert LievensSource video

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

ItemPriceNotes
Action 60-LED corner lamp€18Three connectable LED segments, totals 1.40 m
Wemos D1 Mini microcontroller€4ESP8266 board, USB-programmable
3D printed base0Free download in the video description
PotentiometersmallBrightness control on the back
USB cablesmallPermanent 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:

  1. Open the ESP web flasher tool in Chrome
  2. Plug the Wemos D1 Mini into a USB port
  3. Click "Connect", select the device
  4. Select the downloaded .bin file
  5. 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:

  1. On a phone, connect to the WiFi network broadcast by the lamp (named "RTLP floorlamp" or similar)
  2. Open the configuration page (the phone usually offers "manage router" or similar)
  3. Enter the home WiFi name and password
  4. Enter the Victron email and password
  5. Enter the VRM installation ID

Below those fields are visual settings:

SettingEffect
Minimum state of chargeThe red region. Type 20 if your inverter's minimum is 20%.
Main SoC bar colorColor above the red region. Default 9 (blue). 5 is green.
Fade pixelsWidth of the color transition between red and main. Default 7, around 10 cm. 1 is a hard line.
Charge animationIf 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.

**Watch the build on YouTube**
and give Robbert DIY Projects a like for designing this for the people who do not write firmware. Everything painful (the IDE, the code, the LED addressing math) is hidden behind a .bin file and a captive portal. That is the part that makes it actually usable.

On this page

More from Robbert

All from Robbert

More from Energy Storage