Real devices rarely speak exactly the value the app wants: a meter sends tenths of a kilowatt, a status byte packs eight flags, a relay uses inverted logic. Transformations convert between the protocol value and the displayed value, per object. The Health page then keeps watch over every binding and transformation in the installation.
Transformations
Each communication object can carry an ordered transformation chain. Expand the device and, on the object's row, click the round icon under TRANSFORMS (Transformations) — the gear next to it opens the object settings, not the chain. Then click Add Transformation and pick a type:
| Type | What it does |
|---|---|
| Scale & Offset | Linear conversion: (value × scale) + offset. Unit conversions, meter scaling. |
| Invert Boolean | Swaps true and false — for protocols where 0 means ON. |
| Bit Extract | Extracts a range of bits from an integer (start bit, number of bits, optionally signed). |
| Bit Check | Tests one bit of an integer and returns a boolean (optionally inverted). |
| Value Map | Replaces listed input values with other values, one Input → Output pair per line. The values can be numbers or text, and the result can be a boolean, so it covers a mode number renumbered for another device as well as a text state such as open / closed turned into on/off. An optional Default Value is used when no line matches (otherwise the original value passes through); Strict mode reports an error instead. |
| Clamp | Limits values to a range (or to the object's own min/max). |
| Threshold | Turns a number into a boolean (>, >=, <, <=, ==, != against a threshold, with optional hysteresis). |
| Round | Rounds to a precision (round, floor, ceiling, truncate). |
Each transformation has a direction:
- Incoming — protocol → widget (what the app displays).
- Outgoing — widget → protocol (what a command sends).
- Both — applied in both directions where the operation is reversible.
Only the directions a transformation supports can be selected: Round, for example, is incoming only. On an object that only receives or only sends values, the direction follows the object and cannot be changed. On a read-and-write object a new step starts on Both.
Chains run from top to bottom; drag to reorder. Each step has its own Preview in its dialog: type a value in Input and read Output. The preview tests that one step, not the whole chain. To check the chain, save it, apply the changes and compare a real reading.
Click Save Changes to save the chain, then Apply changes in the sidebar and confirm (see “Admin Panel Tour”).
📘 Note: Check first whether the protocol binding already scales the value — a Modbus object has its own Scale and Offset (see “Modbus TCP Integration”). Apply each conversion once.

Validation. The editor validates the whole chain against the object and the protocol types:
- Blocking issues (e.g. scale of zero, incompatible chain output for the object type) must be fixed first: Save Changes stays disabled while one remains.
- Warnings (e.g. a coerced or possibly lossy conversion) let you save but keep the object flagged on the Health page. A "Duplicate order 0" warning on steps you have just added disappears once the chain is saved.
When you need a transformation
The Devices workspace tells you when a transformation is required: the DPT-mismatch dialog when binding KNX (see “KNX Integration”), and the data-type warning in the object settings (see “Object Settings, Logging & Notifications”). Until the converting transformation is in place, the object appears on the Health page.
The Health page
On the Devices page, click the round icon button in the header (its tooltip reads Health). The page lists every object with a problem:
- an incompatible protocol ↔ widget link (a binding whose types don't fit);
- a transformation configuration issue;
- a recent runtime error (a value that failed to convert at runtime).
Each row is one object. It names the device, the object, its type and datatype, and gives counts only: the number of config issues and the number of runtime errors. A red cross marks an error, an amber triangle a warning. The messages themselves are not on the row. From a row you can:
- Click the row to open the Problems dialog. It gives the message of each configuration issue and, under Runtime (recent), the recorded conversion errors with their values.
- Click the arrow at the end of the row (Open in Devices) — it jumps straight to the device to fix the binding or the chain.
Clear runtime errors is in two places. In the Problems dialog it clears the recorded runtime errors of that object only. In the page header it clears those of every object; the button is shown only while runtime errors exist. Clearing does not fix a cause: it gives you a clean slate to verify a fix against fresh values. Saving a corrected transformation chain already clears that object's runtime errors.
After a correction, click Apply changes in the sidebar and confirm, then click Refresh on the Health page. A fixed configuration issue leaves the list by itself.
When everything is fine the page reports No problems found — All widget objects are healthy.
📘 Note: Health checks bindings, transformations and recorded conversion errors. It does not report an unreachable device or a lost connection: check those on the Connections page (see “Connections”) and with a physical test. Runtime errors are kept in memory, the last ten per object, so a server restart empties them; a remaining cause shows again with the next failing value.
💡 Tip: After commissioning, open the Health page once with the installation live for a few hours: it catches the mismatches that only show up when real values start flowing.
