Throttle noisy alerts
Three small recipes for taming a workflow that fires more often than you actually want to act. Pick the stateful condition that matches the shape of "less". For workflow builders who already have a working pipeline and want to stop pinging Slack twice a minute.
The pattern
Drop a stateful condition between the trigger and the action. The action only runs on the condition's "yes" port; wire the "no" port to nothing (or to a Stop And Fail if you want the suppressed runs to show up red in the execution history).
[trigger] → [stateful condition] → [action]
(other port left empty)
Three condition shapes cover almost every throttling case.
Once per period
Use Cooldown when you want the first event to fire and everything inside the window to be silent.
Trigger:
CO₂ above 1200ppmCondition: Cooldown with Duration1h, Keyspace-{{ .trigger.event.space.id }}Action onallowed: Post To Channel#facilities
The first spike in any space pings the channel; further spikes in that space within the hour are dropped. The key includes the space id so different rooms don't share the cooldown — without that key, room A's spike would silence room B for an hour.
At most N per period
Use Rate Limit when bursts up to N are fine but unbounded firing isn't.
Trigger:
Schedule — every minuteCondition: Rate Limit with Max per window10, Window1mAction onallowed: Set Lights (Fagerhult)
The first ten firings inside any minute go through; the eleventh and beyond are throttled until the next window starts. Useful when you want responsiveness for normal operation but a hard ceiling against runaway loops or sensor flapping.
Once per entity per day
Use Once with a TTL when each subject deserves at most one notification per window.
Trigger:
Device went offlineCondition: Once with Keydevice-{{ .trigger.event.device.id }}, TTL24hAction onfirst: Send Email (SMTP) to your on-call alias
Each device alerts the first time it goes offline; if it stays offline (and the trigger keeps firing), no extra mail. After 24 hours the key resets, so a device that's been offline for a day will alert again the next day. Drop the TTL for permanent dedup — useful for "send the welcome email exactly once".
Choosing fast
| Shape of "less" | Use |
|---|---|
| At most one fire per period | Cooldown |
| Up to N fires per period | Rate Limit |
| At most one fire per key (forever, or per window) | Once |
| Only when a tracked value flips | State Changed |
| Every Nth fire | Every N Times (see Toggle lights with a button) |
When throttling isn't enough
If a workflow is firing constantly because the trigger is wrong, no condition fixes it — go upstream. Switch the trigger to a more specific event, or add an If condition before the throttle to drop irrelevant runs entirely.