Light groups
Several lights in a room can be put into a group. From the outside, the group looks like one light: the app, Alice, the wall switch and automations all see it. Brightness, color and modes of this light are calculated by Home Assistant itself, so the lights behave the same no matter who moves the slider.
How to create a group
- Android: room card or group sheet → “Group members and model”. The room's own lights are at the top, and under the “Lights from other rooms” expander are the rest: a checked light moves to the group's room and leaves its old group. “Save and arrange in a circle” also lays the lights out in an even ring around their common center.
- Web: room panel → “Light groups”: name, members, “Lights from other rooms”, “dim one by one”. A group can be moved to another room together with its lights.
The order of lights isn't set by hand: it's calculated from where the lights are on the plan. Lights turn off in this order, and the running light in modes follows the same order.
A group needs two lights or more. A member that isn't a Home Assistant light (light.*) doesn't get into a light group.
Own 3D model
In the same “Group members and model” window there's the “3D model” block: “Choose…” — from the catalog or your own .glb file, then “Replace…” and “Remove”. Without a model only the lights are shown in 3D. With one, the group looks like a chandelier under the ceiling if the lights hang high, otherwise like a floor lamp. The group model is set only in the app.
Virtual light
For each group, a package is installed in Home Assistant, and it holds the light.homer_<group> light, for example light.homer_living for the living room. The app remembers it in the group as the proxy light and sends commands to it, not to each light separately.
No proxy, no ladder
If a group has no proxy light, the app drives the lights directly, bypassing the ladder, and “brightness 20 %” again means 20 % on every light. Editing the members in the app and on the web keeps the proxy.
If the members changed but the group light in HA was built with the old ones, the group card shows the “The group light in HA has the old members” notice. The slider in the app already drives the new members by itself, while Alice and HA automations control the old lights until the group package is rebuilt — see How packages are installed.
Dimming ladder
A regular group at low brightness lights all lights dimly. The ladder works differently: everyone dims together, and at the bottom end lights turn off one by one. One light that's on gives truly dim light, which five lights at minimum can't.
- The total light output is continuous: five lights at 20 % shine as much as four at 25 %, so a light turning off doesn't read as a jump.
- A bare “turn on” lights the group at full brightness, not at the last brightness.
- A light the ladder has just turned on gets the color of the others and doesn't flash white among colored ones.
- Color and color temperature exclude each other: a command with a color resets the temperature, and the other way around. A command that says nothing about color doesn't touch the color.
Dim one by one
The “Dim lights one by one” switch decides whether the ladder works:
| What happens at the bottom of the slider | |
|---|---|
| On | Lights turn off in turn, the group shines dimmer than a single light can |
| Off | All lights shine the same, the slider only changes brightness |
A chandelier needs the second option: lights in it turning off in turn look burnt out. When the switch is off, the group card doesn't show the row of dots and the “3 of 5 on” count.
Where it is: on Android — under the group card in the room, on the web — in the room's group editor. The setting is stored in the plan, and its mirror (input_boolean.homer_<group>_fade_by_lamp) is sent to Home Assistant by the app and the Homer server on every edit. Changing the mirror directly in Home Assistant is pointless: the next edit in the app overwrites it.
Group modes and Alice scenes
A group light has eighteen modes. This is the closed list of “Smart home with Alice” scenes: you can't add your own names or rename them, otherwise the tile disappears from the Yandex app. The same modes, with the same names, are on the room card in the app: it sends one call to Home Assistant over the home network, no internet needed.
| What it looks like | Modes |
|---|---|
| Steady light, no animation | Reading (95 %, 4000 K) |
| Smooth rise, once | Sunrise (up to 40 % over a minute and a half) |
| Slow breathing of brightness | Sunset, Night, Rest, Dinner, Movie, Ocean |
| Uneven flicker, like a flame | Romance, Candle, Jungle |
| Sharp red pulsing | Alarm |
| A running light around the lights, blue and red, with a white flash | Siren |
| A running light around with changing colors | Alice, Fantasy, Garland, Neon, Party |
- Any other command — brightness, color, turning off, another mode — stops the animation by itself. The light stays as the new command set it.
- Modes draw with light rather than light the room: the ladder doesn't take part in them.
- “Siren” stops by itself after about 83 minutes: that's how many steps Home Assistant allows for the loop.
- There is no “circadian” mode and there can't be: the Yandex protocol has no such scene, it's a feature of Yandex's own lights.
The running light step is half a second
Zigbee isn't an LED strip: every command goes over the network and is acknowledged. A step faster than 0.4 s turns into a queue, and the circle falls apart.
All lights
Besides groups, the home has one light for all lights: “All lights” (light.homer_house). It's needed for modes like “Party” across the whole flat and for “turn off everywhere”.
- Members are taken by the Home Assistant label
homer_house. The Homer server puts it on every light in the plan: a light placed on the plan joins the group within a few seconds, a removed one leaves. - “Dim one by one” is off for it: for the whole home that would mean turning rooms off in turn.
- In the app, this is the “All lights” card on the home overview, above the presets: a toggle and the same modes as rooms. There is no slider on purpose: moving the “level of the whole home” would mean setting the living room and the bathroom to the same brightness.
- For Alice, the home light is a separate device with all the modes.
One light can be in a room group and in all lights at the same time. Then a command to one light first stops the animation on the other. While the whole home is in “Party”, the living room shows the “Party” mode and locks its sliders, and “Take back control” in the living room also stops the party in the whole home.
One message instead of a command to each light
For groups you can create a native zigbee2mqtt group (light.homer_living_zigbee, light.homer_house_zigbee). Then:
- if a command goes to all lights of the group, it's sent as one Zigbee group message: the lights react at once instead of in a wave, and a dead light doesn't hold up its neighbors;
- if the ladder doesn't turn on all of them, the command goes light by light as usual;
- if the group light is unavailable, it also goes light by light.
Group members are described in tools/ha-package/zigbee-groups.json, and the groups themselves are created in z2m by python tools/z2m-groups.py apply. The tool only adds members and doesn't touch other groups. Group number 901 is taken by a z2m service group, so Homer groups are numbered 902 and up.
Light memory after a wall switch
Tuya TS0505B lights turned off with a transition remember the minimum brightness. Turning on from Home Assistant doesn't notice this, but a wall switch brings the light up at the remembered 1 % — the light comes out dim.
The homer_lamp_memory package fixes this in two ways:
- Re-arm. When a light has turned off and the transition is over, Home Assistant puts the last brightness back into its memory without turning it on. The wall switch then turns the light on as it was, even without Home Assistant.
- Rollback. The
sensor.homer_lamp_memorysensor remembers what the last command made the light — from Alice, the app, the Homer server, an automation. If a light turned on or changed brightness without a command, an automation restores the remembered state in a couple of seconds. A light without a record is brought up to full brightness only if it came on below 10 %.
The price of rollback
Brightness set bypassing Home Assistant (z2m frontend, mosquitto_pub, a remote with a direct binding, the “MQTT” action in an automation) will be rolled back. Such paths should go through Home Assistant.
The package covers the home's Zigbee lights. A new light is added to it by hand, to the &lamps list and to the re-arm address table.
What Alice gets
Physical lights of a group with a shared light don't go to Alice: otherwise “the living room light” would turn them on mixed up with the ladder. Alice sees one group light and all lights. The rest about what's exposed is on the Homer via Alice page.
How packages are installed
Group packages are generated from the home config, nobody edits them by hand:
python tools/ha-package.py home.json # show what you'll get
python tools/ha-package.py home.json --write ha # write to ha/You get a package per group and one for the whole home. Deployment to Home Assistant is tools/deploy-ha.py, then reloading templates, scripts, input_text and input_boolean, or restarting Home Assistant.
Before reloading
Home Assistant → Settings → System → Actions → “Check configuration”. An error in a package template breaks the whole Home Assistant startup, not just one file.