Your First Model in 45 Minutes
Build a working model end to end against the built-in simulator — connection, measures, aggregation chain, chart, dashboard, deploy.
This walkthrough builds a small but genuinely complete Infohub model: a connection, a retrieved measure, an aggregation chain, a totaliser handled correctly, a calculation, a chart, and a dashboard — then deploys it and watches values arrive.
It uses the Flow Historian Simulator, which ships with Infohub and needs no external system, so you can follow it on a fresh installation with nothing else configured.
What you need. A Flow 7.2.0 instance you can edit, with Flow Config open and connected to its database, and the Flow Bootstrap service running. Nothing else.
1. Create the connection#
In the Data Sources view, create a new connection of type Flow Historian Simulator.
Name it Simulator. The simulator reads its tag definitions from the file installed at %ProgramData%\Flow Software\Flow\Config\Simulator, so the defaults are correct.
Save it, then browse its tags. You should see a tag namespace describing a juice factory — boilers, mixers, fillers, water, and power. If tags appear, the plugin framework is working and you can build against them.
2. Create the folder structure#
In the Model view you already have a root folder named after your instance — --create seeds it. Under it, create:
<Your Instance>
+-- Utilities
+-- Boiler 1
Folders carry no data. They exist so that people can find things and so templates have something to attach to. Two levels is plenty here.
3. Create a metric and a retrieved measure#
Under Boiler 1, create a metric called Steam.
Inside Steam, create a measure:
| Field | Value |
|---|---|
| Name | Steam Flow |
| Retrieval type | Retrieved |
| Interval | Tag |
| Connection | Simulator |
| Tag | 010-FT-001.PV |
| Unit | kg/s |
That tag is the boiler steam flow and moves in the region of 3.2 to 4.5 kg/s.
This measure is at the Tag interval, which means it stores raw values at whatever times the simulator produced them. It is not on the interval grid, and you cannot chart it on an interval chart. That is expected — the next step fixes it.
4. Build the aggregation chain#
Steam flow is a rate, measured per unit time, so it summarises by Average. Create two more measures in the same metric:
| Name | Retrieval type | Interval | Aggregation | Aggregates from |
|---|---|---|---|---|
Steam Flow Hourly |
Aggregated | Hour(s) | Average | Steam Flow |
Steam Flow Daily |
Aggregated | Day(s) | Average | Steam Flow Hourly |
Note that the daily measure aggregates from the hourly one, not from the tag. Chains step up one interval at a time. See The Measure Hierarchy for why this matters.
5. Add a totaliser, handled properly#
This is the step that teaches the most, because totalisers are the most commonly mis-modelled thing in Infohub.
Create a metric called Water under Boiler 1, and in it:
| Name | Retrieval type | Interval | Aggregation | Source | Unit |
|---|---|---|---|---|---|
Water Meter |
Retrieved | Tag | — | tag 020-FQ-001.PV |
l |
Water Used Hourly |
Aggregated | Hour(s) | Counter | Water Meter |
l |
Water Used Daily |
Aggregated | Day(s) | Sum | Water Used Hourly |
l |
020-FQ-001.PV is a water mains totaliser — a register that only ever climbs. Its average is meaningless and its sum is nonsense. Counter takes the difference across each hour, turning the register into "litres used this hour". From that point up, the values are quantities, so the daily measure uses Sum.
Counter appears exactly once in a chain. Using Counter twice would take the difference between two quantities, which means nothing. One Counter converts a register to a quantity; everything above it sums.
6. Add a calculation#
Create a metric called Efficiency under Boiler 1, with one measure:
| Field | Value |
|---|---|
| Name | Water per Tonne Steam Daily |
| Retrieval type | Calculated |
| Interval | Day(s) |
| Unit | l/t |
For the expression, reference the two daily measures. Infohub refers to measures in expressions by ID, so the shape is:
Measure_<steamDailyId>.Value == 0 ? 0 : Measure_<waterDailyId>.Value / Measure_<steamDailyId>.Value
The == 0 ? 0 : prefix is the zero guard, and it is not optional. On a day the boiler is down, steam flow is zero, and an unguarded division fails — taking that day's value, and anything aggregated from it, with it. See The Zero Guard.
7. Create a chart#
In the Reports view, create a report folder called Boiler Reports, then create a Time Based Chart in it with the Daily constructor.
Drop Steam Flow Daily and Water Used Daily onto it.
Charts only accept their own interval. A chart created with the Daily constructor accepts only daily measures. If a measure will not drop onto a chart, the interval is the first thing to check — and a Tag-interval measure is refused by every interval chart, which is why step 4 existed.
Add a Widget chart with the Daily constructor and drop Water per Tonne Steam Daily onto it, to get a single-value display of the calculated KPI.
8. Build a dashboard#
Create a dashboard called Boiler 1 Overview and place both charts on it. Dashboards use a 12-column grid: a widget sits comfortably in about 3 columns by 3 rows, a main chart in 6 to 12 columns by 4 to 5 rows.
9. Deploy#
Nothing you have built is running yet. Configuration and activation are separate in Infohub.
Open the Deployment view and confirm the Platform's host name matches the machine running Flow Bootstrap. Then deploy the connection, the engine, and the server.
Within a few minutes the Data Engine should start producing values: the tag measures first, then the hourly aggregations, then the dailies, then the calculation.
If no values appear. Work down this list. Is the Platform's host name this machine? Is Flow Bootstrap running? Is the connection deployed, not just saved? Does the Flow event log show anything? Nine times in ten it is the Platform host or a missing deploy. See Diagnosing Missing Data.
10. Look at it#
Open Flow Server in a browser and navigate to Boiler 1 Overview. You should see two days or so of simulated data building up, with the widget showing the calculated ratio.
What you have just learned#
In one small model you have used most of what Infohub does: a connection to an external system, retrieval onto the Tag interval, a contiguous aggregation chain, the rate-versus-totaliser distinction that decides Average from Counter, a guarded calculation, interval-matched charts, a dashboard, and the deploy step that turns configuration into a running system.
Where to go next#
- Tutorials — the full guided track, T01 onward
- The Measure Hierarchy — the shape every model takes
- Choosing the Right Aggregation Type — the decision you just made twice
- Interval Types and Time Schemes — making the calendar match your plant, including shifts