Skip to content
English
  • There are no suggestions because the search field is empty.

Show room status in four colours

Drive a busylight outside every meeting room with a richer signal than red/green: four colours that combine booking state and occupancy state at a glance. One workflow, every tagged busylight in the org. For facilities teams that want the door signal to surface why a room is unavailable — and to make wasted bookings visible.

What this workflow does

Four triggers, four colours:

Booked? Occupied? Colour Meaning
yes yes #FF0000 red Don't disturb
yes no #FFCC00 yellow Held but empty
no yes #FF8800 orange Ad-hoc use
no no #00FF00 green Free

Four independent arms in one workflow — one per trigger. Booking triggers (Booking Started, Booking Ended) know the booking state from the payload and look up occupancy via Space Is Occupied. Occupancy triggers (Space Occupied, Space Not Occupied) know occupancy from the payload and look up booking via Space Is Booked. Find Devices scopes each arm to the busylights tagged room-occupancy-light on The Things Network in the room that just changed. Triggers only fire on transitions, so no "did the colour change" gate is needed.

Each arm has its own Find Devices and its own two Set Busylight leaves (one per branch outcome). Nothing is shared across arms — the workflow engine has no "trigger that fired" alias across triggers, so a shared downstream node can't read from "whichever upstream activated it". The cost is verbosity (8 Set Busylight nodes total, one per arm-outcome combination); the upside is that each Executions log shows exactly one trigger, one lookup, one leaf — instantly answering why did the door turn yellow?.

Workflow canvas: four independent arms laid out as parallel subgraphs. Each arm — a trigger → Find Devices (tag=room-occupancy-light, integration=The Things Network) → lookup branch (Space Is Occupied or Space Is Booked) → two Set Busylight leaves (one per branch outcome). Eight Set Busylight nodes total, no edges crossing between arms.

Prerequisites

  • The Things Network connected, Kuando Busylight Omegas paired and assigned to the meeting rooms.
  • Each busylight tagged room-occupancy-light.
  • Both signals working for each room: a calendar integration and an occupancy sensor.
  • Workflows enabled for your organization. See Enable workflows for your org.

Build it

Four arms, one per trigger. Each arm is five nodes: trigger → Find Devices → lookup condition → two Set Busylight leaves. Build arm 1 in full; the others repeat the pattern with different colours and a different lookup.

Arm 1 — Booking Started → red or yellow

  1. TriggersBooking Started.
  2. ConditionsFind Devices:
    • Space ID — Template mode, {{ .trigger.event.space.id }}.
    • Include descendantsoff.
    • IntegrationThe Things Network.
    • Tagroom-occupancy-light.
  3. ConditionsSpace Is Occupied:
    • Space ID — Template mode, {{ .trigger.event.space.id }}.
  4. ActionsSet Busylight (red leaf):
    • Devices — Data reference, findDevices.deviceIds.
    • Ontrue.
    • Color#FF0000.
    • Brightness80, Patternsolid.
  5. ActionsSet Busylight (yellow leaf) — same settings, Color #FFCC00.
  6. Wire: trigger → Find Devices → Space Is Occupied. Then Space Is Occupied's true port → red leaf, false port → yellow leaf.

Arms 2, 3, 4 — repeat with these substitutions

Arm Trigger Space ID template Lookup condition true ⇒ false ⇒
2 Booking Ended {{ .trigger.event.space.id }} Space Is Occupied #FF8800 orange #00FF00 green
3 Space Occupied {{ .trigger.space.id }} Space Is Booked #FF0000 red #FF8800 orange
4 Space Not Occupied {{ .trigger.space.id }} Space Is Booked #FFCC00 yellow #00FF00 green

Occupancy trigger payloads have no event wrapper — note the shorter .trigger.space.id path for arms 3 and 4.

Save the workflow and toggle Enabled on. From the next transition onwards, every tagged busylight in the org displays the four-colour signal.

Variations

  • Just red/green. Drop the lookups and use Show room status on a busylight instead.
  • Three colours. Map orange to red so unbooked occupancy reads the same as a real meeting — the door is "in use" either way.
  • Blink the squatting case. Set the orange leaf's Pattern to blink so unbooked-but-occupied stands out from booked-and-occupied. Useful where bookings are strictly enforced.
  • Different palette. The colour fields are per-leaf — swap any hex (e.g. #0066FF / #9966CC / #FF9900 / #999999 for colour-blind viewers) without touching the workflow shape.
  • Throttle a flapping sensor. Chain a Cooldown between Find Devices and the lookup so a noisy sensor doesn't strobe colours.

When it doesn't behave

  • Wrong colour on the door. Open the Executions tab — it shows which trigger fired, which lookup branch routed, and which leaf ran. If the lookup result disagrees with reality (e.g. Space Is Booked routed false right after you booked), the calendar may not have propagated yet.
  • Workflow only fires for one room. The two Space ID fields on every arm (Find Devices + lookup) must be in Template mode. The default SpaceSelector picker stores a hard-coded room; the Template toggle is what makes the workflow org-wide.
  • One arm never fires. Missing executions for a trigger mean its source signal isn't producing transitions — either the calendar isn't propagating Booking Started/Ended, or the occupancy sensor isn't reporting.
  • unackedDeviceIds in Set Busylight output. The downlink left the queue but the busylight hadn't woken to receive it. Class C devices ACK on their next keep-alive (15–60s).

Related