Lights, light rules and WLED
One light model across Home Assistant bulbs, WLED strips, Govee lamps and Hue bulbs: adding a controller, what a rule can do, how a segment becomes a light, and which of the four leave your network at all.
WLED carries no plan requirement. A strip behind a television is the opposite of an enthusiast's setup, and gating it would gate the art colour matching that is often the reason to want it. Home Assistant's own widgets do carry one.
One light, whatever makes it
Mirra has a single idea of a light. A Home Assistant bulb, one segment of a WLED strip, a Govee lamp and a Hue bulb are all projected into the same vocabulary, so the widgets, the assistant, light rules and the public API address every one of them without knowing there are four kinds.
That is the whole reason for the arrangement, and it shows up in small places: a light scene can dim a Hue bulb, a Govee lamp and a WLED strip together, and the picker that offers them does not group them by make. A lamp renamed in one place is renamed everywhere.
What crosses the boundary between Mirra and your lights is a small fixed set of instructions: on or off, brightness, a colour, a gradient, a colour temperature, an effect, a palette, a saved preset, a speed, an intensity, a transition time, and a sunrise duration. Nothing else. That is a whitelist rather than a convenience, and the last section of this article explains why it matters far more for WLED than for anything else.
Almost everything generalised. Three things did not, because a bulb has no equivalent: a controller's own saved presets, its firmware-specific effect list, and the shape of a strip as an ordered run of segments. Those get widgets of their own.
Where the four genuinely differ is how they are reached, and it is worth knowing which you have. Home Assistant, WLED and Hue all live on your own network, so Mirra reaches them by asking a screen to pass the message on — with every screen asleep, those lights cannot be switched from the portal at all. Govee goes over Govee's own servers and works whether or not anything of yours is awake. Light rules are the exception that catches people out: the rules engine itself runs on a screen, so an asleep house fires no rules even for Govee.
- Light and Light scenes are core widgets — one light with everything it can do, and a row of named looks applied across several lights at once. Both work on all four kinds of hardware, and on a mixture.
- The strip, Presets and Effect are WLED-only, for the three things that did not generalise.
- Every Home Assistant widget that already knew about lights — the toggle, the slider, the state tile, the Home list, the art frame's colour matching — works on a WLED segment without being told one exists.
Adding a WLED controller
The setup this page is trying to beat is the one where you open a router's admin page hunting for an IP address. So the default path is a button that finds the strips, and typing an address is always available beside it rather than hidden behind an advanced heading — device discovery is blocked on plenty of guest networks, and some households put their lights on a separate network on purpose.
A controller is shown as Online when a screen has reported it within the last five minutes, and Not seen lately otherwise. That is a statement about the last report, not a live ping; claiming otherwise would mean waking a screen every time the page was opened.
Open Integrations, then WLED
The WLED card links to it.
Press Find my lights
A screen does the looking, because it is the thing on your network. WLED controllers keep a list of each other, so finding one usually finds them all — no sweep of the address range, and no waiting for one.
Or add by address
Type something like wled-a1b2c3.local or 192.168.1.42 and press Try this address. Any http:// and trailing slash are stripped for you. This answers "is there a WLED here, and what is it" — it does not save anything, so a typo produces a sentence rather than a dead entry you have to notice and delete.
Press Add on the one you want
Discovery deliberately saves nothing by itself. A neighbour's strip within range of your screen is not something anyone should acquire by pressing a button labelled find. Anything already added is marked Added instead.
Work out which box is which
Press Identify and that controller blinks white three times, then puts itself back. Three controllers all called wled-a1b2c3 is the normal case, not an edge one, and "which of these is the hallway" is the question that ends setups.
Adding a controller turns the WLED integration on for you. You have already said you use WLED by adding one; making you then find a switch on another page would be a step that exists only because Mirra keeps two tables.
How a strip becomes lights
A controller is a box; a segment is the thing that has a colour. If you have split a shelf strip into three in the WLED app, you have already decided those are three lights, and Mirra does not un-decide it. Each segment appears in the entity list as a light, with an id of the form light.wled_ followed by the last six characters of the controller's MAC address, then _s and the segment's index.
Identity comes from the MAC rather than from the hostname or the name. DHCP moves an address, and people rename the box the day they buy a second one. Re-adding the same physical controller — found once, typed in later, added again after it moved — updates the entry it already has instead of growing a duplicate.
Capability is read from the hardware rather than assumed. WLED reports which of colour, a white channel and adjustable colour temperature a segment has, per segment where the firmware says so, and Mirra records it. A widget then hides a colour picker on a strip that has no colour, rather than offering a control that does nothing.
Effects and palettes are stored by name and never by number. WLED's effect and palette ids are positions in a table that shifts between firmware builds, so a stored number quietly comes to mean a different effect after an update. A segment is also only counted as lit when both it and its controller are on — a strip whose master switch is off is off, however keen its segments are.
Segments vanish briefly while you are editing a layout in the WLED app, because a segment with no length does not exist as far as the firmware is concerned — and a segment the controller no longer reports is dropped from Mirra's list, so a widget naming it is left with nothing to talk to.
One box, two ways in
If you also run Home Assistant's own WLED integration, every strip is in both registries and would otherwise appear twice in every picker. Mirra notices and asks you to choose.
Detection is by MAC address, read from Home Assistant's device registry — the only thing in Home Assistant that identifies a physical box rather than an entity. Only a screen can see both registries, so the choice is offered only once one has actually looked. Until then Mirra assumes nothing, because "this household has no Home Assistant" and "this screen has not connected yet" look identical from the outside.
The controller's card then reads Home Assistant also has this controller, with two buttons. Whichever you do not pick stops appearing in pickers, so you see the strip once rather than twice.
What a light rule can do
A light rule is "when this happens, make these lights do that". Rules live under Integrations, then Light rules, and they work across both providers — a Home Assistant bulb and a WLED strip can sit in the same rule.
The last three exist for buildings with a reception desk, and they are the reason the page also lists thermostats.
There are nine things a rule can react to.
Open Integrations, then Light rules
There is a link under the integration cards, because rules span both providers and belong to neither.
Pick a starting point
Blank rule, Wake-up light or Assistant accent. The two named ones are templates rather than special kinds of rule: they fill the form in, and every field is still yours to change.
Choose when, and what
Set the trigger, tick the lights, and set what should happen to them. A rule needs at least one light and can hold at most forty.
Save
Every screen is told the rules have changed, so nothing waits out a poll before the new rule is live.
Turn a rule off rather than deleting it, if you are unsure
Turn off leaves it in the list and stops it firing. Delete asks first and is final.
- At a time — on chosen days, at a chosen time.
- Someone arrives — the screen sees somebody in front of it.
- The room empties — nobody has been there for a while.
- The assistant wakes — somebody summons the mirror.
- The assistant sleeps — the conversation ends.
- An emergency broadcast — every screen in the building is showing an alert.
- Somebody is due — a booked visitor is expected shortly. Warms the room before they arrive.
- A visitor signs in — somebody has just been signed in at reception.
- The building empties — the last person signed in has left.
A presence rule needs a screen with its camera turned on, which is set on that screen's own page. The rules list says so in amber under any rule with a presence trigger, rather than leaving it to be discovered by a rule that never fires.
The three starting points
Blank rule is a timed rule at 07:00, every day, turning the lights you tick on at 60%.
Wake-up light is a timed rule at 06:40, Monday to Friday, coming up like a sunrise over twenty minutes. It is for WLED strips, and the reason is worth knowing: Mirra hands the duration to the controller and the controller runs the whole ramp in its own firmware. That is what makes a twenty-minute wake-up survive the screen going to sleep, losing its network, or restarting halfway through. The editor says so beside the field — a Home Assistant bulb has no equivalent.
Assistant accent makes the lights breathe while the mirror is listening, then puts them back. It ticks the restore option and sets the backstop to five minutes, because the closing edge is the one thing Mirra cannot rely on — a conversation can end without anything ever announcing that it did, and without the backstop the hall stays blue all night.
Mirra deliberately does not use WLED's own nightlight feature for the wake-up. That one is controller-global rather than per segment, aims at whatever segments you happened to select in the WLED app, ignores the target brightness in the mode a wake-up needs, leaves the strip stuck on Sunrise when it finishes, and permanently rewrites your own nightlight button's settings. The Sunrise effect is per segment and does none of that.
Heating and lighting a room before a visitor arrives
A building with a reception desk can use what the desk knows. Book somebody in for ten, and a rule can have the boardroom warm and lit before they walk through the door — the desk already holds the only piece of information that makes that possible.
This is why the Lights and thermostats list on the rules page includes thermostats as well as lamps. A rule that warmed a room and a separate rule that lit it would be two schedules with two chances to disagree about when the meeting starts; one rule does both. A lamp ignores the temperature and a thermostat ignores the colour, so a rule can safely name a mix.
The important part is what happens when nobody turns up.
If the room never warms up
Three things to check, in order. The rule needs a thermostat ticked, not just lights — thermostats are in the same list and carry a Thermostat label. The building needs the guestbook switched on, because a booking is what fires the rule. And at least one screen must be awake: rules are decided on a screen, so a building with everything asleep fires nothing.
If the room stayed warm all afternoon after a cancellation
The rule almost certainly does not have "put things back afterwards" ticked. With it ticked, a booking that passes with nobody signing in releases the rule on its own and the thermostat returns to its previous target.
If you want a rule for one company's visitors only
There is not one. A rule fires for a booking in the building, whoever it is for. Rules belong to the managing agent and are deliberately building-wide.
- A booking starts warming the room 45 minutes ahead.
- Somebody up to 20 minutes late still counts as due — a room does not turn itself off on a visitor stuck in traffic.
- If nobody arrives, the rule releases itself and the thermostat goes back to what it was set to. Nobody has to cancel anything.
- Ticking "put things back afterwards" is what makes that happen. Without it the room stays as the rule left it.
In a building let to several companies, light rules, camera alerts and heating belong to the managing agent. A company account sees and signs in its own visitors and cannot open the rules page — a tenant warming a shared lobby is a bill somebody else pays.
What rules do not do
Rules run on your screens rather than in the cloud, and that decision has consequences worth stating plainly instead of leaving them to be discovered.
One screen runs them. Mirra elects the lowest-numbered screen that is currently awake, and sends every screen the same rules; all but one ignore them. Without that, a three-screen house would send three writes to one controller every time a rule fired.
While every screen is asleep, nothing fires — and nothing is saved up for later. A wake-up light arriving at eleven in the morning because a screen finally woke up is worse than one that did not happen, and the lights were unreachable during the outage in any case. For the same reason the engine settles on its first pass rather than firing, so a screen booting at four seconds past seven does not run the 07:00 rule four seconds late.
Timed rules are checked every fifteen seconds, so a rule can be up to fifteen seconds late. In a room, nobody notices.
- Only the colour is put back. A momentary rule captures whether each light was on and what colour it was showing, and the restore sends that colour back over a two-second transition — brightness, effect, palette, speed, intensity, colour temperature and the active preset are not captured at all. This is a real limitation rather than an oversight: replaying a full segment definition risks deleting the segment.
- A light that was off is left off. It was never changed by the rule, and switching it off now would turn off a lamp somebody has since turned on.
- The snapshot is taken once. A rule that fires again while it is still holding restores what you had, not what its own first firing made.
- Quiet hours, a minimum gap between firings and a broadcast severity filter all exist in a rule, but the editor does not offer them. A rule created in the portal therefore has no quiet window and no minimum gap.
- There is no timezone. A rule's time is the clock on the screen that runs it, which keeps it right rather than merely undetected. A screen whose clock is clearly not set — a Pi after a power cut, before network time lands — is refused outright, because the alternative is running the whole day's rules at once, in the dark.
Asking for a light out loud
The assistant reaches the same lights by the same path, and resolves a name the way you would.
Names are matched in order of how sure Mirra can be: an exact light name first, then an exact area name — "turn off the kitchen" means all of it — then a partial match on either. The tiers do not blend. If you have a light called Kitchen and also a Kitchen area, the light is what was meant; otherwise naming a lamp after its room would make it unaddressable. All, everything, the lights, every light and all lights mean the whole house, up to the forty-light limit.
Colours are words. Mirra understands a short domestic list — warm white, cool white, daylight, candlelight, and red through to lavender — plus modifiers in front of them: deep, dark, rich, soft, pale, light and bright. Deep blue and pale pink both work. A colour it does not recognise is refused rather than guessed at, because silently choosing white would have you repeating yourself at a mirror that appears to be ignoring you.
Asking a group to toggle sends the whole group wherever most of it is not: with three of four on, "toggle the kitchen" turns them off. Toggling each one individually would scramble the room.
If no screen is awake, the honest answer comes back rather than a shrug: no screen online means nothing can reach your home network, and the assistant says so.
WLED has no password
This is the fact the whole design is built around. WLED has no authentication at all. Its settings PIN guards configuration, the file editor and uploads — and pointedly not the endpoint that changes the lights, which is open to anything that can reach it.
The only thing standing between a controller and the internet is that the internet cannot route to your living room. So Mirra never hands a controller raw commands from the cloud. Every instruction is checked field by field against the small vocabulary described at the top of this article, and anything unrecognised is dropped. The same endpoint that sets a colour also reboots the device, wipes its saved presets and destroys a segment, so a pass-through would amount to handing the internet a shell on your living room.
Two practical consequences follow. Keep your lights on a network you trust — anything already on it can control them, with or without Mirra. And Mirra sends one request at a time to each controller, merging rapid changes into the one that matters, because WLED holds a single buffer and two overlapping writes produce one applied change and one silently dropped. Dragging a brightness slider sends where it ended up, not every frame of the journey.
Related
- Home AssistantHow Mirra reaches Home Assistant through a screen on your own network, what it syncs, what it notices, and what each failure message means.
- Integrations: what they are, and turning them onAn integration is an outside source that several widgets draw on — this explains what turning one on and off does, and why Mirra refuses to turn one off while its widgets are still on a scene.
- The assistant: how a conversation worksHow you summon Mirra, what happens between hearing you and answering you, which tools it can reach, where the transcript goes, and what a conversation costs against your monthly allowance.
- Every widget there isThe complete list of widgets Mirra ships with, grouped the way the scene editor groups them, with what each one shows and what it needs before it will show anything.
- The scene editorThe scene editor is where you arrange a screen's widgets on a twelve-column grid, watch the real widgets render behind them, and push the result to the wall.
- People and presenceHow to add a household member, enrol their face on a screen, and understand what Mirra stores about them and where recognition actually happens.
- The art frameHow the art widget turns a screen into a picture frame — collections of your own, our curated catalogue, framing and mats, and what a household actually chooses to hang on the wall.
- Emergency broadcastHow to take every screen on the account at once with one message, using a template and a two-step confirmation — and how to wire a physical button to a screen to do the same thing.