Skip to content
mchristegh edited this page Jul 10, 2026 · 2 revisions

The node is always in exactly one of three states, reported as msg.timerState on every output message.

State Meaning
idle No live counted messages; ready for a new cycle
counting At least one counted message is live; count below the limit
cooldown A timed block on counting, following a Trigger (see Cooldown)

Transitions

                       stop / reset
        ┌──────────────────────────────────────┐
        │                                      │
      idle ──first counted message──► counting─┤
        ▲                                │     │
        │                          count = limit
        │                                │
        ├──── windowexpired ─────────────┤
        │     (fixed: window closed;     │
        │      sliding: decayed to zero) ▼
        │                            TRIGGER (output 1 + 3)
        │                                │
        ├──── no cooldown configured ────┤
        │                                │ cooldown configured
        │                                ▼
        └──── cooldownended ───────── cooldown
              (stop also exits early)

In words:

  • idle → counting — any counted message (a message whose payload is not a recognized command, arriving while neither disabled nor in cooldown). That first message is count 1 and, in fixed mode, anchors the window.
  • counting → idle, with a Trigger — the count reaches the limit. If a cooldown is configured the node passes through cooldown on the way; otherwise it is immediately idle and ready.
  • counting → idle, without a Trigger — windowexpired: the fixed window closed, or the sliding count decayed to zero (see Window Modes).
  • counting → idle, by command — stop or reset wipes the count. The two differ only during cooldown; see Input Messages.
  • cooldown → idle — the cooldown period completes (cooldownended), or a stop cancels it early. Nothing else exits a cooldown — not reset, not enable.

There is no paused state. Pause/resume was deliberately not carried over from the sibling timer-events node — pausing a measurement window has no coherent meaning (freeze the clock? shift the message timestamps?).

Disabled is a flag, not a state

disable blocks messages from being counted, but the node remains in whatever state it was in — a disabled node can be idle, counting (an in-flight window keeps running down), or in cooldown. Every output message reports the flag separately as msg.disabled. See Input Messages for the command's exact behavior.

The status label

What appears under the node on the canvas, per state. The countdown portions update at the cadence set by Status Reporting (see Configuration); the count and state portions update on every event regardless.

State Label Indicator
Idle Ready green dot
Counting (fixed mode) Counting: 2/3 | Window: 00:12:30 yellow dot
Counting (sliding mode) Counting: 2/3 | Oldest expires: 00:01:42 yellow dot
Cooldown Cooldown: 00:02:30 yellow dot
Just triggered a brief Triggered flash, then the cooldown or idle label blue dot
Disabled Disabled | prefixed to the normal label; during cooldown, just Disabled grey ring

In sliding mode the countdown shown is the time until the oldest live message ages out — the moment the displayed count will next change. When it does, the label refreshes to the new count and the next-oldest message's remaining time.

The cooldown label deliberately omits ignored-message detail to stay short; the full picture is always available via query (see Output Messages).

Clone this wiki locally