Platform

Core organises the plant. IQ answers questions about it.

TagLake Core reads your plant and organises every value in one namespace. TagLake IQ sits on Core and answers questions from that namespace in plain language.

  1. 01 Plant systems Where the signals come from DCS · PLC · SCADA · Historians · Databases · MES
  2. 02 TagLake Core One structure Available now
  3. 03 TagLake IQ Operational intelligence In development

TagLake Core

Connect and structure

One process reads your plant, turns every value into a single record, and places it in a namespace your engineers design.

Sources

What Core reads

OPC UA

Discover endpoints, browse the address space to pick nodes, or paste thousands of nodes from a tag export as plain text. Connections can be signed and encrypted, and TagLake refuses a secure server’s certificate until an administrator trusts it.

MQTT and Sparkplug B

Connects to your broker with username and password, TLS and client certificates, and reconnects on its own. Reads Sparkplug B edge nodes, and plain MQTT topics that carry a scalar or JSON value.

Microsoft SQL Server

Connect with a SQL login or Windows authentication, with encryption on by default. Pull values from your existing tables, wide or narrow. TagLake only reads from them.

REST

Reads HTTP/JSON endpoints, using no authentication, basic, bearer or an API key, with TLS. A response is read either as every value it contains or as rows.

Quality, carried end to end

Quality travels with every value, whichever source it came from. When a connection drops or a read fails, the affected values are marked stale and kept, so you can tell a real change from a lost connection.

  • good
  • uncertain
  • stale
  • bad
Normalisation

One record for every value

Every value becomes the same record, whichever source produced it.

FieldWhat it carries
value The measurement itself, in TagLake’s type system.
data type The normalised type, alongside the source’s own type.
unit The engineering unit as the source declared it.
timestamp When the source says the value was produced.
received at When TagLake received it. Kept separately, so you can see how far behind a source is running.
quality good, uncertain, stale or bad, plus the raw status code it came from.
source trail The full path back to origin: connection, node, device, metric.
namespace path Where this value lives in your hierarchy.
Context

Unified Namespace (UNS)

Your engineers design the hierarchy: enterprise, site, area, unit, asset, tag. They create, rename and move nodes by drag and drop, and copy and paste whole branches. A tag binds to exactly one source point and a source point to at most one tag, so "where does TagLake represent this value?" has one answer.

TagLake never mirrors your MQTT topic structure automatically. A topic tree reflects how one gateway happened to be configured. The shape of a plant is an engineering decision, and it should be made once, deliberately, by someone who knows the plant.

Bindings survive restarts. You can bind a tag to a point that is not sending data yet, and it waits for the first value.

Processing

Calculations

Derived values are ordinary tags in the namespace. They are written once as formulas and live beside the tags they come from.

A formula language

Calculations are expressions over tags, including calculations on calculations. TagLake checks a formula when you save it, before anything runs.

  • avg min max sum abs sqrt exp ln log10
  • floor ceil round pow clamp if
  • threshold() roc() ravg() rmin() rmax()

References survive reorganisation

Renaming a tag or moving a whole branch never breaks a calculation, and the formula you read on screen always shows the current path.

History-aware functions

Averages and other aggregates over stored history, such as a one-hour average, are coming.

History

Historian and trends

Core stores history in InfluxDB 2.x. The trends page takes up to twelve pens, with preset ranges, a hover readout, a live tail and CSV export. The pen selection is held in the URL, so you can send a trend to a colleague.

When you zoom out, each downsampled window keeps its minimum, its maximum and its worst quality, so a spike or a bad stretch stays visible.

On Windows, InfluxDB is bundled in the package, so there is no database to download first. On Linux, it runs as a separate server.

Security

Security and access control

Built against OWASP ASVS Level 2, so you have a real answer when plant IT asks.

There are three roles: viewer, engineer and administrator. Every API route requires a role, passwords are stored hashed and checked against known breaches, sign-in is throttled, and Core serves HTTPS with the usual browser protections. API keys let programs connect without a person’s password.

Every configuration change can be undone, and every change is recorded in an audit log against the signed-in user.

TagLake reads your plant. It has no way to write a value or change a setpoint, so there is no setting to switch on by mistake.

Running it

Deployment

One process, with no infrastructure beyond what your sources already need.

On Windows, Core ships as a self-contained package. Run it portably from a folder, or install it as a service. On Linux it ships as a Docker image. It binds to localhost until you give it a certificate and a token.

Full deployment detail

Performance

Performance

Measured figures, with the test conditions next to them.

Comfortable
10,000 values/s 16% CPU · 82 MB · API under 20 ms
Design target
50,000 values/s 60% CPU · 153 MB · 5 ms average API · no loss, UI smooth
Sustained ceiling
~80,000 values/s 99% CPU · 283 MB · sustained without loss, but latency rises

Measured on one laptop running the MQTT broker, the load generator and TagLake Core together. This is a modest machine doing everything at once, not a tuned benchmark, and your numbers will differ.

461 automated tests run on Windows and Linux on every push, alongside a Windows package build and a smoke test of the portable, service and desktop modes, and a SQL Server integration job the release depends on.

TagLake IQ

Operational intelligence

IQ is the intelligence layer on Core. It answers questions in plain language, explains what happened, and will look ahead, all from the namespace your engineers built.

How it works

What it does

Plain-language questions. Ask "What was Pump 101's flow doing last Tuesday?" or "Which tags went bad during the shutdown?" IQ builds the answer from the namespace and the historised values behind it, and cites the tags it used.

Descriptive analytics. Machine learning that explains what the plant did and why: how a unit behaved, what changed between two runs, and what was happening around an event.

Predictive analytics. Machine learning that looks ahead from the same history, so your people see where a unit is heading before they have to react to where it is.

IQ is read-only. It reaches Core through the same public API that any other application uses, with a viewer-role key, so it can read what a viewer can read and nothing else.

Foundation

Why the namespace matters

Industrial AI projects often stall on missing context. A model handed a column called TI_4471.PV learns nothing about the reactor it sits on. A model handed Site01/Reactors/R2/Jacket/OutletTemperature, with its engineering unit, its quality history and its provenance, has something to work with.

Engineers build that map from plant language to tags, units and history in Core. It is worth more than the time series alone, and it is the same namespace IQ reads, so nothing you build in Core has to be redone for IQ.

Start with Core

The namespace you build in Core is the one IQ reads, so nothing is redone when you add it. Try Core for seven days, or tell us about your plant.