Reactive flow cards that pause and wait for device states to change
I'm still exploring if Waiter Gates provide real value in practice. Your feedback is welcome! This feature may evolve or change based on user experience.
Waiter Gates let your flows pause and wait for specific device states to change, with YES/NO paths based on the outcome:
Homey stops every app Flow card after 60 seconds. A card that is still waiting at that point fails with Timeout after 60000ms, no matter which timeout you configured.
Type: CONDITION
Waits for a device capability to reach a target value. Has YES/NO paths.
>100 are not supported.WHEN motion detected
AND wait until [Living Room Light].onoff becomes true (timeout: 30 seconds)
THEN ✅ announce "Light turned on!"
ELSE ❌ notify "Light didn't turn on - check bulb?"
Type: ACTION
Starts a background wait and lets the flow continue immediately - the card returns before it contacts the device, so a slow or stalled device can never make it hit Homey's 60-second limit. When the capability reaches the target value or the timeout expires, the Capability wait finished trigger fires for this Waiter ID. Use this for anything longer than 55 seconds.
0 = no timeout; such a wait is ended as TIMEOUT after 24 hours.kettle_boil) so the trigger can select it.gate_<name>_background), and vice versa.Type: TRIGGER
Fires when a background wait with the selected Waiter ID ends.
true if the target value was reached.MATCHED or TIMEOUT.Type: ACTION
Enable, disable, or stop a waiter gate by its ID.
Works for in-card and background waits. Background Conditional Gate waits use the ID gate_<name>_background.
Type: ACTION
Simple delay without device monitoring. Just pauses the flow for a specified time - at most 55 seconds, because Homey stops app Flow cards after 60 seconds. Longer values fail immediately with a message; use Homey's built-in Flow delay for those.
WHEN motion detected
THEN turn on light
AND wait 5 seconds
AND turn off light
Verify that a smart bulb actually turned on after sending the command.
WHEN light switch pressed
THEN turn on [Smart Bulb]
AND wait until [Smart Bulb].onoff becomes true (timeout: 10 seconds)
THEN ✅ continue normally
ELSE ❌ send notification "Bulb failed to turn on"
AND log error
Make sure door closes after opening, with notification if it stays open for 2 minutes. Two minutes is longer than Homey's 60-second card limit, so the wait runs in the background.
WHEN front door opened
THEN start waiting until [Front Door].alarm_contact becomes false (timeout: 2 minutes, id: front_door)
WHEN capability wait finished "front_door"
AND "Value matched" tag is No
THEN ❌ send notification "Front door still open!"
AND flash lights red
Wait for heater to reach target temperature, alert if it fails.
WHEN heater turned on
THEN start waiting until [Heater].measure_temperature becomes 22 (timeout: 30 minutes, id: heater_warmup)
WHEN capability wait finished "heater_warmup"
THEN ✅/❌ notify "Heater: [Result] after [Waited (seconds)] s" (MATCHED or TIMEOUT)
Verify a device actually switched on after the command. Target values are compared exactly, so wait for a yes/no capability rather than a threshold like >100.
WHEN washing machine program started
AND wait until [Washing Machine].onoff becomes true (timeout: 30 seconds)
THEN ✅ log "Washing machine started"
ELSE ❌ notify "Washing machine didn't start - door open?"
Leave the Waiter ID field empty, and the system automatically generates a unique ID like waiter_1704123456789_x3k9m2
You can provide your own ID for easier control:
light-check-123
door-monitor-main
heater-temp-wait
Each waiter ID must be unique across ALL flows. If you use the same ID in multiple flows simultaneously, they will conflict.
Waiter Gates is an experimental feature. I'd love to hear about your experience:
Share your thoughts on the Homey Community Forum or GitHub Issues.