Skip to content
Elausys

HyperVisu / Logic Engine

Logic Validation, Monitoring & Safety

The save-time checks, live health states, test-firing, and the built-in safety rails.

elausys · 03 August 2026
On this page

Validation & save

When you save, every touched function is checked:

  • Required input unbound — a mandatory port has no source.
  • Type mismatch — a wire or binding whose types do not fit (and no coercion chosen).
  • Forbidden target — an output pointed at an object it must not write.
  • Cycle without a timing block — a feedback loop that would run unbounded; insert a timing block to make it legal.

Saving is always allowed — but a function that fails validation is saved disabled ("disabled by validation") and does not run until you fix it. The result is announced ("Saved. One function has problems and stays switched off.") and the validation panel lists each problem and points at the exact card, port or wire.

📘 Note: This is deliberate: you can save a half-finished sheet at the end of the day without breaking what already runs.

Validation panel open after a save.

Monitoring & maintenance

Switch the canvas to Monitor to watch the logic run: live values appear on ports and wires, and each card gets a health footer. The footer prints no state name; read it like this:

What the card showsMeaning
A green check with the latest result (or the time of the last run, or "never run")Running normally.
A pause icon with minutes and a user name, e.g. "42 min · anna", and a Resume now buttonA manual override paused the function: someone commanded one of its targets by hand (a resident moved the shutter). The minutes are what is left. Click Resume now only when the override should really end.
A red line of textAn error, in the engine's words — e.g. "Input stale: …", naming a watched input whose source has gone silent (see “Logic Engine — Concepts & Canvas”).
An amber line of textRunning, but something needs a look — a conflict on an object the function sets, or something a server update left for you to review.
An OFF chip on the card's headerThe function is switched off — by you, or by validation. It is not evaluated.
A Simulating badge on the card's cornerAn input is forced by Test-fire (see below); the forced input is marked on the card.

Execution history. Select a card and click History to read its latest decisions. The filters are All, Runs, Writes, Errors, Suspensions and Loops. A row is written when a decision changes, not for every evaluation; a run shows its input values and the outputs they produced. The newest 500 entries per function are kept, and the log cannot be exported. This is your answer to "why did the shutters move at 14:02?".

Test-fire / simulation. To test without waiting for real conditions, force an input value:

  1. Select the function and click Test-fire, then choose the Input.
  2. Set the Forced value and choose Revert after: 1 minute, 5 minutes, 15 minutes (the default) or 1 hour.
  3. Click Force the value. The page switches to Monitor, the card carries Simulating and the forced input is marked; the real binding is untouched underneath. One input is forced at a time.
  4. Click End simulation in the same dialog to stop before the time runs out.

⚠️ Warning: Test-fire is not a dry run. The function is evaluated with the forced value: its outputs are written to their devices, the functions that read its outputs run too, and their actions fire. Only the actions of the tested function itself are held back, and those set to When it turns off or Both ways fire when the simulation ends. To test without touching devices, Duplicate the function, remove every device and action from the copy's outputs, enable the copy and test that.

A function that is switched off ignores Test-fire, although the message still says the input was forced: enable it and save first. The server reverts the forced value on its own timer — a closed browser tab cannot leave a simulation running — and the simulation start and end both appear in the execution history.

Deleting a function. Delete shows an impact dialog first, listing only what is affected: the functions that read its outputs, the objects it drives, the actions it performs, and the Widgets made from its outputs. One box, Delete the materialised widgets too, covers all of those widgets: leave it unticked to keep them in the app, frozen at their last value, or tick it to delete them with the function. Confirm with Delete the function.

Monitor mode.

Safety rails

The engine protects the installation from logic mistakes:

  • Loop breaking — a propagation depth cap stops chains that loop through devices from running forever.
  • Rate limiting — a runaway function (20 runs within 10 seconds) is automatically suspended for 60 seconds and flagged in Monitor mode, instead of flooding the bus.
  • Sizing — soft guidance is about 200 functions per installation. Beyond that, prefer consolidating (one Calculated value with 8 inputs instead of a tree of sums) and question whether some logic belongs in the devices themselves.

📘 Note: These rails limit damage; they do not replace design. Anything that must never fail unsafe (wind, frost) should also be protected in the actuator's own parameters.

Frequently Asked Questions

Can I save an unfinished function?

Yes. A function that fails validation is saved disabled and will not run until its problems are fixed.

Where can I see why a function acted?

Select its card and click History to inspect its latest decisions with their input values and outputs. The newest 500 entries per function are kept; the log cannot be exported.

Will a forced test value remain if I close the browser?

No. The server automatically reverts it after the selected duration. The default is 15 minutes and the maximum is one hour. Until then the forced value really drives the function’s device outputs: Test-fire is not a dry run.

Why was a function automatically suspended?

A function that runs 20 times within 10 seconds is suspended for 60 seconds to limit excessive activity. Monitor mode flags the condition.

Do logic safety limits replace actuator protection?

No. Critical wind or frost protection should also be configured in the actuator’s own parameters.

Keep exploring

Find the other guides for this product in the documentation.

Back to Logic Engine