Tags
A tag in Koios represents an individual data point: a temperature reading, a motor speed, a pressure setpoint, a database column value, or a calculated result. Tags are where real data enters and leaves the platform: AI models read from input tags and write predictions to output tags, trends chart tag values over time, and events fire when tag states change.
Tags can get their value from three different sources: a connected device, a computed expression, or an in-memory write from a service. See Tag Source Types below for details.
Read vs Read/Write
Every tag has a usage that determines how Koios interacts with it:
The create form labels these Read-Only and Read/Write. The API uses the underlying names Input and Output. In a CSV import or export the usage column carries the numbers instead — 0 for Read, 1 for Read/Write. See Importing and Exporting Tags.
Tag Lifecycle
Tags follow this lifecycle:
- Create: add a tag and configure its settings (device and protocol fields for device tags, an expression for expression tags, or general settings for in-memory tags)
- Enable: activate the tag so it begins collecting or computing values
- Live: the tag's value updates on each scan or evaluation, is recorded to the time-series database, and is available to models, trends, and the rest of the platform
- Stopped / Failed: a tag stops when disabled (or when its parent device stops, for device tags). It enters a failed state if it encounters an error.
Tag Status
Like devices, every tag has a real-time status:
When a device tag fails, the parent device may continue scanning its other tags normally. Tag errors are isolated: one bad tag doesn't bring down the whole device.
What You See on a Tag
Tag List
The tag list table shows all tags across the platform. The available columns are:
- Status: colored icon showing running, stopped, or failed
- ID and Name: the tag's numeric ID and unique name
- Description: the tag's optional note
- Value: the current live value, formatted to the tag's decimal places
- Range Min / Range Max: the tag's configured range
- Usage: Read or Read/Write
- Source: device, expression, or in-memory
- Device, Protocol, Connection, Device Set: where the tag reads from
- Last Scan, Created, Updated: timestamps
Use the show/hide menu in the toolbar to choose which of these are visible.
Search matches on name or description. You can filter on Status (which filters on live status, not the enabled setting), Name, Description, Usage, Source, Device, Protocol, Device Set, Created, and Updated.
Selected tags can be enabled, disabled, exported (config or data), or deleted in bulk. Duplicate is a per-tag action — right-click a row, or use the menu on the tag's detail page.
Tag Detail
Clicking a tag opens its detail page with four tabs:
- Overview: live status, current value with sparkline chart, device info, and recent events
- Configuration: all editable settings (general, protocol-specific, and advanced)
- Parameters: read-only table of every tag field, organized into live data, config, and protocol sections
- Cross References: shows where this tag is used (AI models, mappings, components, etc.)
Configuration
General Settings
Protocol-Specific Settings
Device tags have additional configuration that depends on their protocol. These settings tell Koios where to find the data point within the device:
Advanced Settings
History Compression
By default, every tag uses the global compression settings configured on the Data Retention page. Global compression uses Swinging Door Trending (SDT) to discard values that don't meaningfully change the trend, reducing storage consumption while preserving the shape of the data.
If a specific tag needs different compression behavior, the History Compression section on the Configuration tab provides an Override global compression settings toggle. When enabled, three tag-specific settings appear:
When the override is off, the tag follows whatever the global settings are. A link on the Configuration tab takes you directly to the Retention page to view or change them.
Tag Source Types
Every tag has a source type that determines where its value comes from. You choose the source type when creating a tag.
Device Tags
The most common type. A device tag belongs to a device and inherits its protocol. The device handles the connection, and the tag defines what to read or write within that connection: an OPC-UA node, a Modbus register, an EtherNet/IP controller tag, a SQL query, and so on.
Expression Tags
Expression tags compute their value from a formula evaluated by the Expression Evaluator service. Expressions can reference:
- Tag values and status: the live value, status, or error code of any other tag
- Device status: whether a device connection is running or failed
- Model status: whether an AI model is running or failed
- Binding values: the raw prediction value from a model output binding
This makes expressions useful for more than simple math. You can build logic that reacts to the health of devices or models, not just their data. Expressions support arithmetic, comparison, and logical operators, plus built-in math and statistical functions.
Expressions are evaluated in one of two ways:
- Reactive: when a referenced tag updates, the expression re-evaluates immediately (within milliseconds). Referencing a tag's status or error code counts, not just its value
- Timer-based: if the expression references no tags at all, it evaluates once per second
See Expression Tags for the full syntax reference.
In-Memory Tags
In-memory tags historize values written by the predict engine, mapping service, or component engine. These services write an output_value to the live data cache when they produce a result (e.g. a model prediction or a mapped value). Without an in-memory tag, that output value lives only in the cache and is never recorded.
The Expression Evaluator service monitors in-memory tags and relays output_value to the tag's live value, writing each update to the time-series database for historical storage. This relay happens two ways:
- Event-driven: the producing service publishes a notification after writing, and the relay happens within milliseconds
- Timer fallback: a periodic check (default 60 seconds) catches any missed notifications
In-memory tags also provide:
- Status monitoring: the tag shows running/stopped/failed status like any other tag
- Stale detection: if the source service stops writing, the tag surfaces a warning after a configurable timeout (default 24 hours) while staying in a running state. Marking it failed would stop the producing model, so a stale value stays running with a warning showing how long ago the last write occurred
- Waiting state: before the source service writes for the first time, and whenever it has no value to pass on (a mapping whose source tag is failing, for example), the tag shows a running status with no value and the warning "No output value — ensure tag is bound to an enabled model, mapping, or component connector"
Output Conflicts
When multiple sources (an AI model, a mapping, and a component) all try to write to the same output tag, Koios flags an output conflict on the tag's overview page. This is a warning: only one source's value will be written per scan. Review the tag's cross references to understand what's writing to it and resolve any unintended overlaps.
Key Concepts
What's Next
- Creating a Tag: step-by-step guide to adding a new tag
- Expression Tags: syntax reference for expression formulas
- Value Mapping: mapping raw device values to numeric outputs
- Bad, Missing, or Frozen Tag Values: diagnosing errors and testing tag reads
