Back to articles

Turning a Forgotten BlinkStick Into an Ambient Weather Display

· · 5 min read

The Drawer Find

I was tidying up my desk last week and pulled open the drawer where old tech goes to die. Tangled cables, a Pi Zero I bought for a project I never started, and a BlinkStick Square — a tiny USB board with eight RGB LEDs on it. I'd bought it years ago, played with it for an afternoon, and forgotten about it.

I plugged it into my Raspberry Pi 5 running Home Assistant, half expecting nothing to happen. The LEDs lit up white. Still alive.

Home Assistant used to have a BlinkStick integration, but it was removed a while back as part of a cleanup of unmaintained components. That meant no config flow, no UI, nothing. If I wanted this thing to do something useful, I'd have to write the integration myself.

Building the Integration

The BlinkStick hardware is straightforward. It's a USB HID device — no serial port, no special drivers. The Python blinkstick library handles the low-level communication: set a color, set brightness, run an effect. The challenge was wrapping that in a proper Home Assistant component with config flow, device discovery, and a clean light entity.

I set up the integration as a custom component with a few goals:

  • Standard light entity — full RGB color picker, brightness slider, works with any automation
  • Effects — Pulse, Morph, and Blink, selectable from the effects dropdown like any other HA light
  • Config flow — add via UI, no YAML needed, with USB auto-discovery for plug-and-play setup
  • Multiple devices — each BlinkStick is identified by serial number, so you can have several

The trickiest part was the effects. HA light entities expect turn_on to return quickly, but effects like Pulse run continuously. I ended up running effects in background threads with a threading event for clean cancellation — when you change the color or turn off the light, the running effect stops immediately without any awkward delay.

The Weather Idea

A working LED is nice, but a working LED that does nothing useful is just a night light. I wanted it to tell me something at a glance — something I check every morning anyway.

Weather.

The concept is simple: the LED color represents the current weather condition, and the brightness represents how the temperature compares to what's normal for this time of year. One look, two pieces of information.

Color Mapping

Each weather condition maps to a color:

  • Green — sunny or clear. Good day ahead.
  • Yellow — partly cloudy or overcast. Not bad, not great.
  • Purple — fog. Wrap up, drive carefully.
  • Blue — rain. Grab an umbrella.
  • White — snow or sleet. Layer up.
  • Red — lightning or thunderstorm. Maybe stay in.
  • Orange — windy. Hold onto your hat.

After living with it for a few days, I found I stopped thinking about the colors consciously. Purple in the morning just meant "it's foggy" without reading anything or pulling out my phone.

Brightness as Temperature

Color alone doesn't tell you whether it's a mild 15 degrees or a bitter 2 degrees. That's where brightness comes in.

The automation compares the current temperature against UK monthly averages — 4 degrees in January, 20 in July, and so on. If the temperature is well above average, the LED is bright. Well below, it's dim. Around normal, it sits in the middle.

In practice: a bright green LED in March means an unusually warm sunny day. A dim blue means rain and cold — colder than you'd expect for the month. The brightness gives context that color alone can't.

The thresholds work out to roughly:

  • Very bright — more than 5 degrees above the seasonal average
  • Bright — 2 to 5 above
  • Medium — within a couple of degrees either way
  • Dim — 2 to 5 below
  • Very dim — more than 5 below

The Dashboard

An LED on a desk is fine for me, but the rest of the household wanted to know what the colors meant without memorising a table. So I built a small dashboard setup in Home Assistant.

The main view has a compact markdown card that shows the current state in one line:

BlinkStick Purple -- Medium / 6.8 degrees vs 8 degrees seasonal avg

Below that sits a native weather card showing the full forecast, so you get both the at-a-glance LED summary and the detailed breakdown in the same view.

Tapping "legend" opens a subview with three panels: a color-to-condition table on the left, a brightness-to-temperature table on the right, and the monthly seasonal averages along the bottom. I used card-mod to strip the table borders and stretch everything to full width — it took a few rounds of fighting with shadow DOM styles, but the end result is clean and readable. The card YAML is included in the repo README if you want to replicate it.

Sharing It

The integration itself is a custom component installable via HACS: ha-blinkstick. It works with any BlinkStick model — Square, Strip, Pro — anything with the standard USB vendor and product ID.

The weather automation is packaged as a Home Assistant Blueprint, so you can import it with one click from the repository README. It takes three inputs: your weather entity, your BlinkStick light entity, and optionally your own monthly temperature averages if you're not in the UK.

Was It Worth It?

Honestly, yes. Not because the world needed another weather display, but because it turned a forgotten gadget into something I actually look at every day. It sits on my desk, quietly glowing, and I know what to expect outside before I open the curtains.

If you've got a BlinkStick in a drawer somewhere, dust it off. It takes about ten minutes from plugging it in to having a working weather display.

More articles