How to Build a Custom Tower Stack Light for Home Automation

Ever walked into a room and wished the lights could tell you what’s happening without you having to check an app? A tower stack light does exactly that – it gives you a quick visual cue about the status of your smart home. Building one yourself is cheaper, more fun, and lets you tinker exactly the way we love at Stack Light Chronicles.

What is a Tower Stack Light?

A tower stack light is a vertical column of small LED modules, each one a different color. In factories they signal machine health: green means “all good”, amber means “caution”, red means “stop”. At home you can use the same idea to show things like:

  • Green – All doors locked, security armed
  • Amber – Motion detected in the yard
  • Red – Smoke alarm triggered or water leak

Because the light is right in your line of sight, you get the info at a glance. No buzzing phones, no scrolling through menus.

Why Build Your Own?

Buying a pre‑made tower can cost a few hundred dollars and you end up with a box that only works with the vendor’s cloud. DIY gives you:

  • Full control over the look and the behavior
  • Ability to tie it into any platform – Home Assistant, OpenHAB, or even a simple Raspberry Pi script
  • The satisfaction of soldering the wires yourself (yes, it’s messy but rewarding)

Parts List – Keep It Simple

ItemTypical Cost
5‑inch aluminum tower housing (or 3‑inch if you like a compact look)$15
3‑color LED module strip (WS2812B or similar, 30 LEDs)$10
Raspberry Pi Zero W (or ESP32 if you prefer)$10
5 V power supply (2 A)$8
Micro‑USB cable, heat‑shrink tubing, solder kit$12
Optional: 3‑position switch for manual override$5

All of these can be found on sites like DigiKey, Amazon, or your local electronics store. The total stays under $70, which is a fraction of a commercial unit.

Step‑by‑Step Build

1. Prepare the Tower Housing

  1. Remove any plastic caps that came with the housing.
  2. Clean the inside with a dry cloth – dust will make the LEDs look dim.
  3. If you want a custom look, paint the outside with matte black spray. Let it dry for at least an hour.

2. Cut and Wire the LED Strip

  1. Measure the height of your tower and cut the LED strip to fit. Most WS2812B strips have cut marks every 3 cm.
  2. Solder a short piece of 22‑AWG wire to the “+5V”, “GND”, and “Data In” pads. Use heat‑shrink to protect the joints.
  3. Slide the strip into the tower, making sure the data line points upward (the data flows from bottom to top).

3. Set Up the Controller

Raspberry Pi Zero W is my go‑to because it has Wi‑Fi built in and runs Home Assistant nicely.

  1. Flash the latest Raspberry Pi OS Lite onto a micro‑SD card (use the Raspberry Imager tool).
  2. Enable SSH and Wi‑Fi by adding a ssh file and a wpa_supplicant.conf file to the boot partition.
  3. Boot the Pi, then sudo apt update && sudo apt install python3-pip.
  4. Install the rpi_ws281x library: pip3 install rpi_ws281x adafruit-circuitpython-neopixel.

4. Connect Power

  1. Plug the 5 V power supply into a wall outlet.
  2. Connect the supply’s positive lead to the LED strip’s +5V wire, and the negative lead to GND.
  3. Tie the Pi’s 5 V and GND pins to the same wires – this keeps everything at the same voltage level and avoids flicker.

5. Write a Simple Status Script

Create a file called stack_light.py on the Pi:

import board
import neopixel
import time
import requests

# Pin 18 is the default PWM pin on Pi Zero
pixels = neopixel.NeoPixel(board.D18, 30, brightness=0.5, auto_write=False)

def set_color(color):
    pixels.fill(color)
    pixels.show()

def get_home_status():
    # Replace with your own Home Assistant API call
    url = "http://homeassistant.local:8123/api/states/binary_sensor.front_door"
    headers = {"Authorization": "Bearer YOUR_LONG_LIVED_TOKEN"}
    try:
        r = requests.get(url, headers=headers, timeout=5)
        return r.json()["state"]
    except:
        return "unknown"

while True:
    state = get_home_status()
    if state == "on":
        set_color((0, 255, 0))      # green
    elif state == "off":
        set_color((255, 165, 0))   # amber
    else:
        set_color((255, 0, 0))      # red
    time.sleep(30)

This script checks a binary sensor (like a door lock) every 30 seconds and changes the tower color accordingly. You can expand it to read multiple sensors and show patterns.

6. Run It at Startup

Add the script to /etc/rc.local before the exit 0 line:

python3 /home/pi/stack_light.py &

Now the tower will light up as soon as the Pi boots.

7. Optional Manual Switch

If you like a physical override, wire a 3‑position toggle between the Pi’s GPIO pins and the LED data line. Use a simple Python script to read the switch state and set the color manually. It’s a neat way to test the tower without touching the code.

Fine‑Tuning Tips

  • Brightness: Keep it under 50 % if the tower sits near a bedroom. Too bright can disturb sleep.
  • Heat: LED strips get warm. If you notice the housing getting hot, add a small aluminum heat sink inside.
  • Network: A stable Wi‑Fi connection is key. If the Pi drops off, the tower will stay on its last color. Consider a cheap Wi‑Fi extender if your router is far away.

My First Light Experience

The first time I wired up a stack light in my garage, I set it to green when the garage door was closed and red when it was open. I walked in late at night, saw a bright red glow, and realized I’d left the door ajar. The light saved me a trip to the kitchen for a flashlight. That little moment made all the soldering mess worth it.

Wrap‑Up

Building a custom tower stack light is a blend of simple electronics, a dash of coding, and a lot of personal flair. You end up with a visual status board that fits right into your smart home ecosystem, and you learn a bit about LED control along the way. Grab the parts, follow the steps, and let the tower do the talking.

Reactions
Do you have any feedback or ideas on how we can improve this page?