zigbee_card: single scene-cycle button (replace day/night toggle + on/off) #1

Open
opened 2026-10-22 17:15:45 +00:00 by neonoverlord · 1 comment
Owner

Request

Replace the current day/night scene toggle with a single scene-cycle button, then remove the separate on/off lights button.

Desired behavior

One button. Each press advances to the next scene; after the last scene, the next press turns the lights off; the press after that restarts the cycle at the first scene.

scene 1 → scene 2 → … → scene N → off → scene 1 → …

"last on is off" — off is the terminal step of the rotation, so a dedicated on/off control is no longer needed.

Consequence

  • The day/night two-state toggle is replaced by the full rotation.
  • The separate on/off button is removed (off now lives inside the cycle).

Implementation notes / open questions

  • The card drives scenes via CardController → the house bot (door_url) → zigbee2mqtt. A full cycle needs (a) the ordered scene list and (b) the current position tracked across presses.
    • Where does the scene list come from — z2m scenes, the bot, or card config? Pin this first.
    • Where is the current index stored — client-side, or read back from the device/bot each press (survives reload, more robust)?
  • Button label/icon should reflect the current scene (and "off") so the cycle position is visible.
## Request Replace the current **day/night scene toggle** with a single **scene-cycle** button, then remove the separate **on/off lights** button. ## Desired behavior One button. Each press advances to the next scene; after the last scene, the next press turns the lights **off**; the press after that restarts the cycle at the first scene. ``` scene 1 → scene 2 → … → scene N → off → scene 1 → … ``` "last on is off" — off is the terminal step of the rotation, so a dedicated on/off control is no longer needed. ## Consequence - The day/night two-state toggle is replaced by the full rotation. - The separate on/off button is removed (off now lives inside the cycle). ## Implementation notes / open questions - The card drives scenes via `CardController` → the house bot (`door_url`) → zigbee2mqtt. A full cycle needs (a) the **ordered scene list** and (b) the **current position** tracked across presses. - Where does the scene list come from — z2m scenes, the bot, or card config? Pin this first. - Where is the current index stored — client-side, or read back from the device/bot each press (survives reload, more robust)? - Button label/icon should reflect the current scene (and "off") so the cycle position is visible.
Author
Owner

Architecture (clarified)

  • z2m holds the scenes — source of truth for the scene list.
  • The bot calls the scenes from z2m — the card never talks to z2m directly.
  • Both the NC card and @zigbee interface with the bot — the bot is the shared front end for both.

Design implication

Because the card and @zigbee both go through the bot, the cycle state (current position; "next press after the last scene = off") must live in the bot, not client-side in the card — otherwise the card and @zigbee drift out of sync on where the rotation is. So:

  • ordered scene list: from z2m, via the bot;
  • current position + advance/next-is-off logic: in the bot, exposed to both the card and @zigbee;
  • the card button just asks the bot to "advance" and renders what comes back (scene name, or off).

This resolves the open questions in the description.

## Architecture (clarified) - **z2m holds the scenes** — source of truth for the scene list. - **The bot calls the scenes from z2m** — the card never talks to z2m directly. - **Both the NC card and @zigbee interface with the bot** — the bot is the shared front end for both. ## Design implication Because the card *and* @zigbee both go through the bot, the **cycle state** (current position; "next press after the last scene = off") must live in the **bot**, not client-side in the card — otherwise the card and @zigbee drift out of sync on where the rotation is. So: - **ordered scene list:** from z2m, via the bot; - **current position + advance/next-is-off logic:** in the bot, exposed to both the card and @zigbee; - **the card button** just asks the bot to "advance" and renders what comes back (scene name, or off). This resolves the open questions in the description.
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: bawnet/zigbee_card#1