When a flow does not do what you expect, look at what it actually did before you change it. This page shows where to look and lists the common causes.
Where to look
| Place | Shows | Kept |
|---|---|---|
| Flow list row | State (Running, Off, Paused, Needs approval, Invalid, Draft), Activity, errors in 24 h, Limited · … when a protection acted | |
| Editor top bar | Live or Every 5 s, messages per second, waiting messages, errors in 24 h | |
| Wires and blocks | Message counts on wires; In, Out and Errors counters on blocks; a red mark on a failing block, a yellow ring where a protection acted | 24 hours |
| Activity > Debug | Messages that reach Debug blocks | 24 hours |
| Activity > Runs | Recorded runs step by step: Started with, In, Sent on, It did, Left the flow | 24 hours |
| Activity > Trace | One message followed through every step | 24 hours |
| Activity > Errors | Error counters per block, newest errors, where each was caught | 7 days |
| Events: Log | Lines of System log blocks and the engine | 24 hours |
| Events: Lifecycle | Deployed, turned on and off, paused, resumed, rolled back, root changed, did not start, breaker opened and closed | 30 days (last 100) |
| Events: Stats | Per block: in, out per port, errors, dropped, refused by a limit, average and longest time, slow steps | 24 hours |
| Events: Audit | Who changed the flow (last 50 entries) | Audit log retention |
| Failed messages | Messages the flow could not run | Until replayed or discarded |
| Errors and alerts (flow list menu) | Alerts of 6 hours, flows with errors, most frequent errors of 7 days |
Message contents are shown only to people with Inject messages, see payloads and dead letters. Others see counts.
Record what happens
By default only counters are kept. To see message contents:
- Open Activity, then Runs.
- Set Record to Runs that fail, or to Every run, for 5 minutes.
- Let messages arrive, then open a run. “Kept x of y runs” tells you how many were recorded.
To follow one message exactly, select a trigger and Trace the next message. To focus on one block, right-click it and choose Debug node (or Record this block for 5 minutes).
From any recorded input, Test with this input reruns it as a test, with nothing stored or sent.
Common problems
| Symptom | Likely cause | Fix |
|---|---|---|
| The flow never starts | It is Off, Paused, Needs approval or never deployed | Deploy it with Run the flow after the deploy, or Resume it |
| A flow with a Device message trigger hears nothing | It is not a root; ordinary device messages reach only the root | Make it a profile root, or hand messages over from the root with Run flow. Only alarm and attributes_updated reach every flow, and only when ticked by name. |
| A root receives nothing at its Device message trigger | The root’s Flow input is wired, so it is the entry | Wire your steps after the Flow input |
| Data is not stored | Save telemetry is missing on the path, or reports an error | See Hosts, the root flow and profile root flows |
not_a_device | The message was started by a schedule, inject, event, timer or webhook, which are not about a device | Do device work in the root, or in a flow it runs |
| A Schedule fires at the wrong hour | The block’s tz is empty and the organisation’s default zone differs | Set tz; check Show the next runs |
| The deploy refuses a sun schedule | No latitude and longitude | Fill lat and lon |
A block keeps erroring with circuit_open | Its calls kept failing and are paused | Fix the receiver; it recovers by itself |
HTTP request fails with ssrf_blocked | The address is private, or not on the endpoint’s allowed hosts, or the path leaves the base path | Use a public address and add the host to allowed_hosts |
| Nothing is sent after an outage | The messages were late; outbound blocks skip late messages | Set late to send on data feeds that need the backlog |
| A Notify sends nothing | Every recipient is in the cooldown (held), or invalid, or every channel is out of quota | Check msg.metadata.notify in a run; set Repeat reason |
| Members do not get e-mail from Notify | Members (users, roles, teams) are reached in the app, by push and in chat apps only | Add address rows |
| The flow paused itself | A loop (runs a minute over the limit) or failing runs | See Protections and failed messages |
| “These blocks send messages round in a loop that never waits” | A cycle without a waiting block | Add a Delay, or break the cycle |
flow_cycle at deploy | Flows trigger each other through events or Run flow | Remove one link of the cycle |
| A counter or average restarted | The block’s settings changed at the last deploy | Expected: a changed block starts with an empty memory |
A script fails with script_unavailable or host_busy | The script service is not reachable or busy | Retry later; contact support if it persists |
A script fails with timeout or blocked | Over 50 ms of CPU, three times in a row | Simplify the script, or move work to ready blocks |
queue_full | A block holds too many messages or keys | Shorten waits, set a key, or lower the input rate |
| Readings arrive but the dashboard is late | Charts over more than 24 hours read minute summaries, filled every minute | Wait a minute or two |
A flow does too much
- Stop one flow: switch it off in the flow list (its memory and waiting messages are kept).
- Stop all flows: the emergency stop, from the flow list’s header menu. Device data is not stored while it is on. See Protections and failed messages.
- Undo a change: Versions > Roll back to this. See Versions, testing and rollback.
Asking for help
When you contact support, include the flow’s name and slug, the time of the problem (with your time zone), the block and its error code, and, if you can, an exported copy of the flow (secrets are never in it). See Getting help.

