Monitor, automate & report your energy β from one platform
MatrixIQ is an industrial SCADA & IoT platform for energy monitoring and reporting. Connect field devices over standard protocols, stream their data live, and build dashboards, alarms, automation and reports β all from the web, no coding needed for everyday use.
Admins & integrators
Set up connections & devices, map tags, build dashboards, write scripts and manage users.
Start with Connections βOperators
Open your assigned dashboards to monitor live data, acknowledge alarms and pull reports.
See the runtime βNew here?
Learn the core building blocks β connections, devices, tags, parameters and dashboards.
Key concepts βMatrixIQ User Manual
MatrixIQ is an industrial SCADA & IoT platform for energy monitoring and reporting. It connects to field devices (PLCs, energy meters, sensors) over standard industrial protocols, collects their data in real time, stores it, and lets you build live dashboards, alarms, automation and reports β all configured from the web, with no coding required for everyday use.
What you can do with MatrixIQ
- Connect to devices using Modbus TCP/RTU, OPC-UA, BACnet, DNP3, IEC-61850/104, Siemens S7, Allen-Bradley, Generic MQTT and more.
- Monitor live values on customizable drag-and-drop dashboards built from 80+ widgets (gauges, charts, tables, status indicatorsβ¦).
- Automate with scripts, schedulers and rules that react to tag values.
- Alarm & notify via alarm rules, escalation, email and app notifications.
- Report with scheduled Excel/PDF reports, downtime analysis and KPIs.
- Manage tickets, integrate with Node-RED & external APIs, and expose data over an OPC-UA server.
Key Concepts
A few terms are used throughout MatrixIQ. Understanding this hierarchy makes everything else easier:
| Term | What it means |
|---|---|
| Connection | A communication channel to a system or gateway (e.g. a Modbus TCP connection, an OPC-UA endpoint). Connections have a type (protocol) and a status (Online/Offline). |
| Device | A physical or logical unit reachable through a connection (e.g. an energy meter). Devices belong to a connection. |
| Poll | A read instruction for a device β which register block to read, how often (polling time), function code, etc. |
| Tag | A single data point (a measured value) such as Voltage or kWh. Tags are read from devices/polls and carry a live value, timestamp and status. |
| Memory Tag | A virtual tag whose value is set internally (by scripts, manual entry or calculations) rather than read from a device. |
| Tag Group | A named collection of tags used together in reports, dashboards or rules. |
| Dashboard / Screen | A configurable canvas of widgets that visualize tags β in Realtime (live) or Historical (queried) mode. |
| Parameter | A predefined logical measurement name (e.g. Voltage) that maps to the right tag on each device, so dashboards/templates work across devices. |
Getting Started
Signing in
Open MatrixIQ in your browser and go to the sign-in page.
- Enter your Email / User ID and Password.
- Choose your User Type:
- Admin β full access to configuration, devices, scripting, users and licensing.
- User β access to the dashboards and features granted by an administrator. Users get 3 login attempts.
- Click Sign in.
From this page you can also use Forgot password?, Sign Up (request a new account) and Update Licence (apply or renew a licence key).
The main screen
After signing in you land on your home dashboard. The interface has three regions:
- Left sidebar β the navigation menu, grouped into modules (see below).
- Top bar β the menu toggle and your profile/greeting on the right.
- Content area β the active screen (e.g. Connection Management).
Navigation map
The sidebar groups every feature. This is the map for the rest of this manual:
| Menu | Contains |
|---|---|
| System Configuration | Connections, Devices, Tags, Tag Groups, Memory Tags, App Settings, OPC-UA Server |
| Dashboards | Configurable screens, KPI dashboards, publishing |
| Automation & Logic | Scripts (Value Change / Interval / Schedule / User Action), Scheduler, Parameters, Recipes |
| Alarms & Notifications | Alarms, Alarm Rules, Escalation, Email settings |
| Reporting & Analysis | Reports, Downtime reporting, KPIs |
| Ticket Manager | Ticket creation, resolution, user tickets |
| Integrations | Node-RED, API access, OPC-UA server |
| User Management | Users, user groups, roles, security levels |
Connections Admin
A Connection defines how MatrixIQ talks to a system β which protocol/driver it speaks and the transport settings (IP, serial port, broker URL, OPC-UA endpointβ¦). Everything else β devices, polls and tags β hangs off a connection, so this is almost always the first thing you set up.
1
2
3
4
5
6
7
- 1 Connections menu β under System Configuration in the sidebar.
- 2 Create Connection β add a new connection (name + driver type).
- 3 Type β the protocol/driver of each connection (WT-400, Modbus RTU/TCP, Power Modbus, Generic MQTTβ¦).
- 4 Connection Status β Active / Deactive (whether MatrixIQ keeps the link up).
- 5 Status β the live link state: Online / Offline / None.
- 6 Connection Settings (gear) β open the driver's transport settings (IP/port, serial, broker, OPC-UAβ¦).
- 7 Edit / Delete β the pencil edits a connection's name/status; the bin removes it.
The Connections screen
Open System Configuration β Connections. The table lists each connection with:
| Column | Meaning |
|---|---|
| Type | The protocol/driver (e.g. WT-400, Modbus TCP, Modbus RTU, OPC-UAβ¦). |
| Connection Name | The name you gave it (stored in UPPERCASE). |
| Connection Status | Active / Deactive β whether MatrixIQ should try to keep this link up. |
| Status | Online (green) / Offline (red) / None β the live link state, updated automatically. |
| Connection Settings | The gear icon β opens the protocol-specific advanced settings (see below). |
Row actions: the red bin deletes a connection, the blue pencil edits its name/status.
Which protocols are available?
The Select Connection Type list is driven by your license β only the drivers your installation is licensed for appear. MatrixIQ ships with a broad set of industrial drivers:
| Family | Drivers | Typical use |
|---|---|---|
| Modbus | Modbus TCP, Modbus RTU, Power Modbus | PLCs, energy meters, I/O β over Ethernet or serial (RS-485/232). |
| MQTT | Generic MQTT, WT-400-MQTT, Robustel MQTT | IoT edge gateways / data-loggers that publish to a broker. |
| OPC-UA | OPC-UA (client) | Modern PLCs / SCADA exposing an OPC-UA server. |
| PLC native | S7-200 SMART, AB MicroLogix | Siemens S7 and Allen-Bradley MicroLogix controllers. |
| Building / utility | BACnet/IP, DNP3, IEC-104, IEC-61850 | BMS, power utilities and substation automation. |
| Meter DB | Schneider PME (SE-PME-DB) | Pull historical data from a Power Monitoring Expert database. |
Creating a connection
- Click Create Connection (top-right).
- Enter a Connection Name. It is forced to UPPERCASE and may not contain a hyphen (
-); names must be unique. - Pick the Connection Type from the licensed list (this cannot be changed later β only the name/status can be edited).
- Set Status to Active (link will be attempted) or Deactive.
- Save. The connection appears in the list; open its gear β Connection Settings to enter the transport details.
Driver-wise setup β the 3-stop journey
Getting live data into MatrixIQ is always the same three-stop journey β only what you fill in at each stop changes with the driver:
- Connection β open the door to the network (the protocol + its transport settings).
- Device β name the unit sitting behind that door (its identity/address on the protocol).
- Tags β pick the individual values to read from that unit.
Below is one recipe card per driver showing exactly what's unique at each stop. They're also listed under Driver Reference in the navigation menu (click to expand). Common to every device: an optional Template to pre-load its polls/tags, and a Status option (a Status Tag + Check Time) that tracks whether the device is alive.
Modbus TCP & Power Modbus
| Stop | What you set |
|---|---|
| β Connection | IP, Port (502), Timeout, Reconnect Time. |
| β‘ Device | Unit Id β the Modbus slave/unit number of the meter. (Many devices can share one connection, each with its own Unit Id.) |
| β’ Tags | Create Polls (Function Code: HOLDING/INPUT REGISTER, COILS/INPUT STATUS + Starting Address + Quantity), then add tags by Position (offset inside the poll block) with a register data type (Int/UInt/DInt/Float Β± Swap). Power Modbus = same, tuned for energy meters. |
Modbus RTU
| Stop | What you set |
|---|---|
| β Connection | Serial Port (COM, auto-detected), Parity, Baudrate (4800β115200), Data Bit (8/7), Stop Bit (1/2) + Connection/Reconnect/Queue delays & Timeout β must match every slave on the bus. |
| β‘ Device | Unit Id β the slave address on the serial line. |
| β’ Tags | Same as Modbus TCP β Polls (function code/address/qty) then tags by Position. |
DNP3
| Stop | What you set |
|---|---|
| β Connection | IP, Port (20000), Timeout, Reconnect Time, Master Id. |
| β‘ Device | Outstation Id β the DNP3 outstation address. |
| β’ Tags | Polls use DNP3 object types (Binary Input/Output, Analog Input/Output, Double-bit Binary Input, Counter) + variation; tags by Position. |
MQTT β Generic, WT-400-MQTT, Robustel MQTT
| Stop | What you set |
|---|---|
| β Connection | Broker IP & Port, and UserName / Password if required. (The gateway publishes; MatrixIQ subscribes.) |
| β‘ Device | Generic MQTT: a Topic. WT-400-MQTT / Robustel: Publish Topic, Subscribe Topic, Slave ID (WT-400-MQTT also a Group ID). |
| β’ Tags | Generic MQTT: each tag is a Path into the JSON payload β tick TimeStamp Exist to also map a Data Path + TimeStamp Path; a live Result Preview shows the parsed value (data type Number/String). WT-400-MQTT / Robustel: tags arrive as ready-made Raw tags β just name and use them. |
OPC-UA (client)
| Stop | What you set |
|---|---|
| β Connection | Endpoint URL (opc.tcp://β¦) β Search to fetch Security Policy β pick a policy + auth type (Anonymous or Username/Password). |
| β‘ Device | Select Objects β browse the server's address space and choose the object(s) this device represents. |
| β’ Tags | No addresses to type β browse and tick the nodes you want in the OPC-UA tag selector; they become tags directly. |
S7-200 SMART (Siemens)
| Stop | What you set |
|---|---|
| β Connection | IP, Port (102), Timeout, Reconnect Time. |
| β‘ Device | Poll Time (ms) β how often this controller is read (no Modbus-style poll editor). |
| β’ Tags | Each tag has a Data Address (S7 style, validated as you type) and an S7 data type β Binary, Byte, Word, DWord, DInt, Real. |
AB MicroLogix (Allen-Bradley)
| Stop | What you set |
|---|---|
| β Connection | IP, Port (44818), Timeout, Reconnect Time. |
| β‘ Device | Poll Time (ms). |
| β’ Tags | Each tag has a Data Address (MicroLogix style, validated) and data type Number / String / Binary. |
IEC-104
| Stop | What you set |
|---|---|
| β Connection | IP, Port (2404), Timeout (s), Reconnect Delay (s) β in seconds for this driver. |
| β‘ Device | Asdu Id + Poll Time (ms). |
| β’ Tags | Each tag is identified by a Type Id and an IOA Id (chosen from dropdowns); data type Number / Binary. |
IEC-61850
| Stop | What you set |
|---|---|
| β Connection | IP, Port (102), Timeout, Reconnect Time. |
| β‘ Device | Select device (the IED's logical device) + Poll Time (ms). |
| β’ Tags | Tags come as pre-defined Raw tags from the selected logical device β pick and name them. |
BACnet/IP
| Stop | What you set |
|---|---|
| β Connection | IP, Port (47808), Timeout, Reconnect Time. |
| β‘ Device | Select Device (from the discovered BACnet devices) + Poll Time (ms). |
| β’ Tags | Map tags to the device's BACnet objects by Position. |
Schneider PME (SE PME DB)
| Stop | What you set |
|---|---|
| β Connection | IP, Port (1433), UserName, Password, Database Name (e.g. ION_Data), Data Sync Time (min). Use Test to verify the SQL link. On the SQL Server: TCP/IP enabled + SQL Server Browser running. |
| β‘ Device | Select Device from the device list read out of the PME database. |
| β’ Tags | Tags arrive as Raw tags from PME β no addressing; MatrixIQ pulls their history on the sync interval rather than polling live. |
WT-400 (WIMAN-400)
| Stop | What you set |
|---|---|
| β Connection | Nothing to configure β a built-in FDM data-logger driver; goes Online as soon as it is set Active. |
| β‘ Device | IMEI Number + Group Id of the WT-400 logger. |
| β’ Tags | Tags come as ready-made Raw tags from the logger. (For the broker-publishing variant use WT-400-MQTT above.) |
Devices & Polls Admin
A Device is a single unit you read from, sitting under a connection (e.g. one energy meter on a Modbus bus). Polls are the read instructions β they tell MatrixIQ what registers to read from that device and how often.
1
2
3
4
5
6
7
8
- 1 Devices menu β under System Configuration.
- 2 Search Devices β filter the list by name.
- 3 Import Device β bulk-add devices from a file.
- 4 Create Device β add one device (connection + name + optional template).
- 5 Device Type β the device model/type (e.g. MFM443, EM6400, PUMP, SOLAR).
- 6 Template Status β Bind (a template is applied) or Unbind.
- 7 Poll / Tag β open the device's polls & tags.
- 8 Row actions β delete, edit, duplicate and export/download the device.
Adding a device
- Open System Configuration β Devices and click Create / Add Device.
- Choose the parent connection, give the device a name, and (optionally) apply a template to pre-load its polls/tags.
- Save. Use the search box to filter devices and the column header to sort by name.
Configuring polls
Open a device β Polls β Create. A poll groups a contiguous block of registers read in one request:
| Field | Meaning |
|---|---|
| Poll Name | A label for this read block. |
| Polling Time (ms) | How often to read β e.g. 1000 = once per second. Shorter = fresher data but more load on the device/bus. |
| Function Code | What kind of register to read. For Modbus: HOLDING REGISTER, INPUT REGISTER, COILS STATUS, INPUT STATUS. For DNP3: Binary Input/Output, Analog Input/Output, Double-bit Binary Input, Counter. |
| Starting Address | The first register/address of the block. |
| Quantity | How many registers/points to read from the starting address. |
Tags Admin User
A Tag is one data point β one meaningful value such as Voltage L-N or Run Status. Every tag carries a live value, date/time, status (online/offline) and a data type. Most tags read from a device, but not all β a tag's value can also be set internally or computed by a script (see Tag types below).
1
2
3
4
5
6
7
- 1 Tags menu β under System Configuration.
- 2 Totals β Total / Online / Offline tag counts at a glance.
- 3 Search β filter by tag/device name, or type
online/offlineto filter by status. - 4 Delete Tags β remove selected tags.
- 5 Value β the tag's current live value (with its Date Time = last update beside it).
- 6 Status β the online/offline indicator dot.
- 7 Parameter β the logical parameter this tag is linked to.
- Tag Management (System Configuration β Tags) shows every tag with totals for Online / Offline and a search box β type a tag/device name, or
online/offlineto filter by status. - Per-poll tags are managed from inside the poll; per-device tags from the device's Tags screen.
Tag types
When you create a tag under a device, the first choice is its type β this decides where the value comes from. The tag editor shows different fields for each:
| Type | Where the value comes from | Use it for |
|---|---|---|
| Poll Tag (a.k.a. external / device tag) | Read live from a device poll β you map it onto an address in the poll's register block and pick its data type. | Any real measurement coming off a meter/PLC (voltage, current, statusβ¦). |
| Internal Tag | Held inside MatrixIQ, not read from the device. You give it a starting value, or mirror another tag with TagMapping (pick a Source Tag). | Manually-set values, flags, or a local copy/mirror of another tag. |
| Script Tag (function tag) | Its value is computed by an embedded script β the tag editor includes a code editor with the same Insert Data picker and built-in functions as the Scripts module. | Derived/calculated values β efficiency, totals, anything maths-based. |
- Memory Tag β a device-independent virtual tag (its own module). Like an internal tag but not tied to any device β see Memory Tags.
- System Tag β built-in tags the platform provides automatically; they show up as options in scripts and report rules alongside your own tags.
Settings common to device tags
- Tag Name and an optional Parameter link (so dashboards/reports/templates resolve it across devices), plus a Unit label.
- Active β when ticked, the tag's values are saved to the database (historian) for trends and reports; untick to keep it live-only and save storage.
- Write β when ticked the tag is writable (operators/scripts can send values to it); unticked = read-only.
- Alarm thresholds β optional Hi / HIHI / Low / LOWLOW limits (these feed the Alarms module).
Tag data type & register format
Each tag is fundamentally a Number, String or Binary value. For register-based drivers (Modbus TCP/RTU, Power Modbus, WT-400-MQTT) you also choose how the raw registers are decoded β the word/byte order matters and must match the device:
| Data type | Meaning |
|---|---|
Int (A B) / IntSwap (B A) | 16-bit signed, normal or byte-swapped. |
UInt (A B) / UIntSwap (B A) | 16-bit unsigned, normal or swapped. |
DInt / DIntSwap, UDInt / UDIntSwap | 32-bit signed / unsigned across two registers, with word-swap variants (A B C D) vs (C D A B). |
Float (A B C D) / FloatSwap (C D A B) | 32-bit IEEE float, normal or word-swapped. |
Binary | A single on/off bit (used for coil/input-status tags). |
β¦Swap type. The tag editor validates the live value
against the chosen type and warns if it doesn't match.Other drivers offer their own data-type lists in the tag editor, e.g. Generic MQTT β Number/String; AB MicroLogix β Number/String/Binary; S7-200 Smart β Binary/Byte/Word/DWord/DInt/Real; DNP3 / IEC-104 β Number/Binary. The editor only shows the types valid for that tag's connection.
Scaling, units & alarm thresholds
Inside the tag editor you can turn raw register values into engineering units and attach limits:
- Linear scaling β map a raw range (minRawβ¦maxRaw) onto an engineering range (minScaleβ¦maxScale), or apply a simple multiplier and offset. You can even upload a
Raw_value,Scale_valueCSV for a custom curve. - Unit β a label (V, A, kW, Β°Cβ¦) shown alongside the value on widgets and reports.
- Alarm thresholds β optional Hi / HIHI and Low / LOWLOW set-points that feed the Alarms module.
- Binary aliases β for Binary tags, give the two states friendly names via True Alias / False Alias (e.g. Running / Stopped).
- Parameter link β bind the tag to a logical Parameter (see Tag alias note) so templates and dashboards resolve the right tag automatically.
Tag Groups Admin
A Tag Group bundles related tags under one name so you can reuse them as a set β in reports, dashboards and scheduled emails β instead of picking the same tags over and over. Open System Configuration β Tag Groups, create a group, and add the tags you want (e.g. "Feeder-1 Electrical" = its V, A, kW, PF tags).
1
2
3
4
5
- 1 Tag Groups menu β under System Configuration.
- 2 Create Tag Group β bundle related tags under one name.
- 3 Tag Groups Name β the group's name (e.g. KWHGROUP).
- 4 Total Tags In Group β how many tags the group contains.
- 5 Edit / Delete β change the group's members or remove it.
Memory Tags Admin
A Memory Tag is a virtual tag not tied to any device β its value is set internally rather than read from a poll. Use them for:
- Setpoints & benchmarks β a target line a chart compares against.
- Computed values β results written by Scripts (e.g. efficiency = output Γ· input).
- Counters & manual entries β shift numbers, batch IDs, operator inputs.
- Testing β drive a widget without real hardware.
Create them under System Configuration β Memory Tags; they then behave like any other tag in widgets, scripts and reports.
1
2
3
4
5
6
7
- 1 Memory Tags menu β under System Configuration.
- 2 Totals β Total / Online / Offline memory-tag counts.
- 3 Search β filter by tag name, or type
online/offline. - 4 Create Tag β add a virtual (device-independent) memory tag.
- 5 Value β the internally-set value (written by scripts, manual entry or calculations).
- 6 Status β the online/offline indicator dot.
- 7 Row actions β delete, edit and duplicate the memory tag.
App Settings Admin
Application-level configuration. The most important item here is the system MQTT broker β MatrixIQ
publishes every live tag value to it on a tag_<id> topic, and that is exactly what realtime
dashboards subscribe to in order to update instantly. Open System Configuration β App Settings to view or
configure the broker and related application tags.
1
2
3
4
5
6
7
- 1 App Settings menu β under System Configuration.
- 2 UserName β the system MQTT broker username.
- 3 Password β the broker password.
- 4 Port β the broker port (live tag values are published here for realtime dashboards).
- 5 Status β Active / inactive.
- 6 Tag Config β configure the application / app tags.
- 7 Edit / Delete β change or remove this configuration.
OPC-UA Server Admin
Besides reading from an OPC-UA server, MatrixIQ can also act as an OPC-UA Server β exposing its own tags so external OPC-UA clients (other SCADA, an MES, a historian) can subscribe to your data. Open System Configuration β OPCUA Server:
- Create a server endpoint β set its port and security options.
- Choose which tags it publishes to clients.
- Save; external clients can then browse and subscribe to those tags.
1
2
3
4
5
6
- 1 OPCUA Server menu β under System Configuration.
- 2 Create Server β opens the server-setting dialog shown here.
- 3 AuthType β Anonymous or User Detail (username/password) for clients connecting in.
- 4 Port β the port the OPC-UA server listens on.
- 5 Active β enable the server.
- 6 Create β save it; then use Tag Config (in the row) to choose which tags it publishes to clients.
Building Dashboards Both
Dashboards (also called Configurable Screens) are the heart of MatrixIQ. A dashboard is a free-form canvas onto which you drop widgets β gauges, charts, tables, buttons, images β and bind each one to your tags. Nothing is hard-coded: you design exactly the screen your operators need.
Creating a dashboard
- Open Dashboards (or System Configuration β Screen Management) and click Create. Give the dashboard a name. Use Import to load a dashboard that was exported earlier.
- The new dashboard opens in the builder β an empty grid canvas with a toolbar.
1
2
3
4
5
6
- 1 Dashboard name β the screen you're editing (here IOCL).
- 2 Builder toolbar β Back, Preview (βΆ), Add Widgets (+) and Save (also
Ctrl+S). - 3 Search β find a widget by name.
- 4 Categories β Trends, Table, Gauge, Tools, Status, Shape, Alarm, Jobs, Analysis.
- 5 Widget thumbnails β click to pick (LineChart, PieChart, DonutChart, HeatMapβ¦).
- 6 OK adds the selected widget to the canvas; Cancel closes the palette.
The builder at a glance
| Control | What it does |
|---|---|
| Back (β©) | Leave the builder. Always Save first or unsaved changes are lost. |
| Add Widgets (β) | Opens the widget palette (the categorized library β see below). |
| Save (πΎ) | Persists the dashboard layout and every widget's configuration. (Ctrl + S also saves.) |
| Grid canvas | Where widgets live. Drag a widget to move it; drag its corner/edge to resize. Widgets snap to the grid. |
| Properties panel | Opens when a widget is selected β its Data and Style settings (see Binding & configuring widgets). |
Placing a widget
- Click Add Widgets to open the palette.
- Pick a category on the left (Gauge, Trends, Toolsβ¦) or type in the palette search box (e.g. βchartβ, βgaugeβ, βrealtimeβ).
- Click a widget tile β it is added to the canvas.
- Move it by dragging; resize it from a corner/edge. Right-click a widget for actions such as duplicate and delete.
- Select the widget and set its Data (which tag) and Style in the properties panel.
- Click Save.
Widget Library
MatrixIQ ships with 80+ widgets, organized into the categories you see down the left of the Add Widgets palette. The category list is built automatically, so any custom KPI widgets you create also appear here. Below is the full reference.
Gauge visual
Single-value indicators β show one tag as a dial, bar or specialised gauge.
| Widget | Use it for |
|---|---|
| FullGauge, SemiGauge | Classic full / half circular gauges with thresholds. |
| BasicGauge, SpeedGauge, Speedometer, StageSpeedGauge | Speedometer-style dials for rate/throughput values. |
| ProgressGauge, RingGauge, BarometerGauge | Progress / ring / barometer style single-value displays. |
| GradeGauge, MultiTitleGauge, TemperatureGauge | Graded bands, multi-titled, and temperature-styled gauges. |
| Clock | An analog clock face. |
| Maps | Geographic map placement of devices/values. |
| PieCalendar, CustomCalendar | Calendar-based value displays. |
Trends β charts
Time-series and comparison charts (these support both Realtime and Historical data where applicable).
| Widget | Use it for |
|---|---|
| RealtimeChart | Live scrolling line chart. Streams values as they arrive; optional historical back-fill on first load (HistoryMinutes), a MaxPoints scrolling window, tag aliasing and a benchmark set-point line. Multi-tag. |
| LineChart | Historical trend line over a chosen time span / interval. |
| AreaChart, ColumnChart, StackChart, CombineChart | Area, column, stacked and combined (line+column) trends. |
| ComparisonChart | Compare a value across periods (e.g. today vs yesterday). |
| PieChart, DonutChart | Share/proportion of values. |
| RaceChart, ERaceChart | Animated ranking (βbar raceβ) charts. |
| HeatMap | Matrix heat-map of values. |
| TimeLine | Event/state timeline. |
| LargeScaleBarChart, NightTingleChart | Large-scale bar and rose/nightingale charts. |
Tools β text, buttons, controls
The largest category β values as text, interactive controls and navigation.
| Widget | Use it for |
|---|---|
| SimpleTagValue, SimpleText, DynamicText, TextLine | Show a tag value or static/dynamic text labels. |
| SparkLine, Bar, RunTime, Shift, AssetsHealth | Mini trend, bar, run-time, shift and asset-health indicators. |
| StatusWidget, TagStatus | Online/offline or state indicators for a tag/device. |
| WriteDevice, MultiButton, ScriptButton, PrintButton | Write a value to a device, multi-action buttons, run a script, print the screen. |
| GoToButton, TabGoToButton, ExternalLink, PopupButton, ChartPopupButton | Navigate to another screen/tab/URL, or open a value/chart popup. |
| DropdownTool, ListBox, DateTimePicker, QueryBinder | Input controls and a query binder for dynamic time ranges. |
| RecipeSettings, RecipeSelector, TemplateSelector | Recipe and template selection controls. |
| Card, WebWindow, ViewReportPreview, WeatherWidget, Arrow, Flow | Card container, embedded web page, report preview, weather, and flow/arrow annotations. |
Table
| Widget | Use it for |
|---|---|
| TagTable | A live table of selected tags (value, time, status). |
| HistoricalTagGroup | Tabular history for a tag group over a time span. |
| ManualDataEntry | Operator entry of values (writes to memory tags). |
Status & Shapes
| Widget | Use it for |
|---|---|
| ImageStatus, ShowImage, MultiImage | Swap/show images based on a tag's state (e.g. valve open/closed). |
| Rectangle, Circle, Triangle, Line | Drawing primitives to build mimics/diagrams. (Plus a library of SVG process icons.) |
Alarm, Jobs, Analysis & AI
| Widget | Use it for |
|---|---|
| AlarmStatus, AlarmSetPoint | Show alarm state / edit alarm set-points from the dashboard. |
| JobSettings, JobsTable | Configure and list production jobs. |
| TimePieChart | Time-distribution analysis pie. |
| AIClock | A self-contained realtime analog clock (AI Widgets category). |
Binding & Configuring Widgets Both
Selecting a widget opens its properties, split into Data (what it shows) and Style (how it looks).
1
2
3
4
5
6
7
- 1 DATA / STYLE tabs β DATA binds what to show; STYLE controls appearance (colours, legend, titleβ¦).
- 2 tag β bind the tag(s) or parameter the widget displays.
- 3 Tag Alias β show a friendly alias instead of the raw tag name.
- 4 functions β the aggregation for historical data (Average, Sum, Min, Maxβ¦).
- 5 timeSpan β the period (Today, Yesterday, Weekβ¦).
- 6 type β Realtime (live stream) or Historical (query stored data).
- 7 The widget live-previews on the canvas as you change the settings.
Realtime vs Historical
Most value widgets have a Type switch:
| Mode | How data is fetched | Typical use |
|---|---|---|
| Realtime | The widget subscribes to the tag's live MQTT feed and updates the instant a value changes. | Live monitoring β gauges, status, the Realtime Chart. |
| Historical | The widget queries the time-series database over a chosen Time Span and Interval, applying a Function (Average, Min, Max, Total, Differenceβ¦). | Trends and analysis over a period. |
Binding a tag
- In Data, pick the Tag (on a device dashboard) or Parameter (on a template/screen, so it resolves per device).
- Optional β enable Tag Alias and type a friendly name to display instead of the raw tag name.
- For Historical widgets, also set Function, Time Span and Interval (or a From/To range).
- Set a Benchmark / set-point if the widget supports it β choose a constant value or a tag, and a line colour; a reference line is drawn on charts/gauges.
The configuration controls
The properties panel is generated automatically from each widget's definition, so the same control types appear everywhere:
| Control | Meaning |
|---|---|
| Tag / Parameter selector | Choose the tag(s) or parameter(s) to bind (single or multiple). |
| Dropdown / List | Pick from a fixed set of options (e.g. Function, Time Span). |
| Radio buttons | Mutually-exclusive choice (e.g. Realtime / Historical). |
| Checkbox / Toggle | On/off options (e.g. Legend, Transparent Background, Tag Alias). |
| Colour picker | Series colours, background, set-point line colour. |
| Number box | Numeric settings (line width, resolution/decimals, max points, history minutesβ¦). |
| Text box | Labels, titles, alias names. |
Templates & Screens Admin
When you have many similar devices, build the dashboard once as a Template and reuse it everywhere. Templates bind to Parameters (logical names) instead of specific tags, so the same screen automatically shows the right values on each device.
Templates
- Create a template (Templates screen β Create), then add one or more Screens to it.
- Design each screen in the builder exactly like a dashboard, but bind widgets to Parameters.
- Import / Export templates as
.zip(including images) to move them between systems.
Applying a template
When adding or editing a Device, choose a template; the device instantly gains all of the template's screens, resolved to that device's tags. Update the template once and every device using it follows.
1
2
3
4
5
6
- 1 Templates β under Dashboards β Tools (alongside KPI, Popups, Assets, Predefined Parameters).
- 2 Import β bring in a template as a
.zip(incl. images). - 3 Create β make a new template.
- 4 Template Name β e.g. MFM443, CHILLER, AHU, PUMP.
- 5 Screens β open/manage the template's screens (designed against Parameters).
- 6 Row actions β delete, edit, duplicate and export the template.
Standard Screens Admin
Not every screen needs to be built from scratch. Standard Screens are a fixed catalogue of ready-made screens and reports whose look and functionality are pre-built β you don't drag widgets onto a canvas, you just fill in a short configuration form (a name, the devices/tags/parameters to show, and a heading) and the screen is instantly ready. They're the fastest way to stand up common views.
- Configurable Dashboard β a blank canvas; you place and bind widgets freely. Maximum flexibility, more effort.
- Standard Screen β a fixed layout/function; minimal configuration. Fast and consistent, but you can't rearrange it.
Adding a Standard Screen
Open Standard Screen Management β it lists every available standard screen with a Configuration (+) action. Click it, fill the short form (typically a Name, the devices / tags / parameters to show, and a Heading / SubHeading) and save. The finished screen is then linked to users just like any dashboard.
1
2
3
- 1 Standard View β under Dashboards (next to Configurable View, Publish, Tools).
- 2 Name β the nine ready-made screens with a fixed look & function (see the table below).
- 3 Configuration (+) β open the short form to set up that screen.
The available standard screens
| Screen | What it shows | Key configuration |
|---|---|---|
| RealTime Table | A live table of current values for chosen devices/parameters. | Name, Device(s) (+ Device Alias), Parameter, Heading and font sizes. |
| Performance History | A historical trend/graph of selected parameters over time. | Name, Query, Device(s), Parameter(s), Graph Type, TimeSpan, Interval. |
| Monthly Reconciliation Report | Energy balance/reconciliation (e.g. mains vs sub-meters) over the month. | Name, Source Tags, Query, Hi/Low limits, Heading/SubHeading. |
| Query Reconciliation Report | The same reconciliation, driven by a saved query. | Name, Source Tags, Query, Hi/Low limits, headings. |
| Mains Energy Consumption Report | Consumption summary for a mains/incomer tag. | Name, the mains Tag, Query, Heading/SubHeading. |
| Audit Trail | A log of who changed what β write actions on the selected tags, by user. | Name, Select Tags, Select Users, Heading/SubHeading. |
| Maintenance Report | A report built from your maintenance plans. | Name, Select Maintenance plan(s), Heading/SubHeading. |
| Maintenance Overview | An at-a-glance status of selected maintenance plans. | Name, Select Maintenance plan(s). |
| Screen Tabs | Combines several screens into one tabbed view. | Report Name, Theme, then a row per tab β each a Configurable or Template screen (with Template / Screen / Device) and a Tab Name. |
Dashboards in Action User
These are real examples of finished dashboards β what an operator sees after signing in. Everything here is built from the widgets, templates and standard screens described above; the left menu is the user's runtime menu (Static headings with Dynamic screens beneath, assigned per user).
Energy & electrical monitoring
Industry examples
More example dashboards will be added to this gallery.
Scripts Admin
Scripts let you add custom logic in JavaScript β read tags, do calculations, write results back to tags or memory tags, send emails/notifications, and more. MatrixIQ runs scripts in four different ways, each with its own page under the Scripts menu:
| Script type (menu) | Runs when⦠| Typical use |
|---|---|---|
| Value Change (on-change) | A watched tag's value changes. | React instantly to an event β e.g. raise a flag when a level crosses a limit. |
| Interval | Every fixed time interval (e.g. every N minutes). | Periodic calculations β rolling averages, efficiency, totals. |
| Schedule | At a scheduled time. | Time-of-day logic β start-of-shift resets, nightly roll-ups. |
| User Action (on-click) | An operator clicks a button widget on a dashboard. | Manual actions β write a setpoint, trigger a sequence, acknowledge. |
Each type has its own list page (e.g. Interval Script Management). Click Create Script to add one:
1
2
3
4
5
6
7
8
- 1 Script types submenu β Interval, Schedule, Value Change, User Action (and Scheduler below).
- 2 Create Script β add a new script (opens this dialog).
- 3 Script Name.
- 4 Time Interval (m) β for Interval scripts, how often it runs.
- 5 Bind Device β tie the script to device(s) so it can use Parameters / Memory Tags.
- 6 Status β Active / Deactive.
- 7 Create β saves; then open it in the editor.
- 8 JS β open the script's code editor (see below).
Device vs. global scripts
When you create a script you choose whether it is tied to specific devices or runs globally. This changes what you can reference inside it:
- Device script β can insert Parameters and Memory Tags (resolved against the selected devices), so the same script works on any matching device.
- Global script β can insert raw Tags, Tag Groups, Device Names, User Groups and Recipes.
The script editor
Open a script to get a full-screen code editor with four actions along the top:
| Button | What it does |
|---|---|
| Insert Data | Opens a picker to drop a reference into the code at the cursor β a Tag/Parameter/Memory Tag, a Tag Group, a Device Name, a User Group, a Recipe, a Time Span, or a built-in Function. No need to memorise IDs. |
| Save Script | Saves the current code. |
| Test Script | Runs the script once and shows the output in the log panel at the bottom β add print(...) lines to see values while debugging. |
| Back | Returns to the script list. |
1
2
3
4
5
6
- 1 Insert Data β drop a tag / parameter / built-in function at the cursor.
- 2 Save Script.
- 3 Test Script β run once; output shows in the log below.
- 4 Back β return to the script list.
- 5 Code editor β write JavaScript (read/write tags, calculations).
- 6 Log panel β
print()output appears here for debugging.
await sendEmail(to/UserGroup, cc, subject, body, fileNameWithPath, attempt)
and await sendAppNotification(messageType, UserGroup, title, body) for alerts straight from a script.Built-in Script Functions
The Insert Data β Function list gives you ready-made async helpers β there are a lot, so they're grouped
below by what they do. Each is called with await (e.g. let v = await read('TagName')).
The reference categories also appear under Script Functions in the navigation menu (click to expand).
tagName/tagNamesβ a single tag, or several tags, inserted from the picker (works with tags, memory tags and parameters).timeSpanβ the time window for historical functions:1/5/10/15/30 min,1/4/6/8/12 hour,24 hour running,24 hour completed,Today,Yesterday,Week,Month,Year.timeReference/startTimesβ anchor the window to a reference point / explicit start time instead of "now".intervalβ for the β¦WithInterval functions, the bucket size the window is split into (returns a series, one value per bucket).
Reading & writing tags
| Function | What it does |
|---|---|
await read(tagName) | Returns the current value of a tag. |
await write(tagName, value) | Writes a value to a tag (device or memory tag). |
await writeTagGroup(tagGroupName) | Writes values across every tag in a tag group in one call. |
await increase(tagName, value) | Adds value to the tag's current value. |
await decrease(tagName, value) | Subtracts value from the tag's current value. |
await bitMap(sourceTag, bitPosition, destinationTag) | Reads the single bit at bitPosition of sourceTag and writes it to destinationTag. |
await writeBitMap(tag, bitPosition, tag/value) | Sets the bit at bitPosition of tag from another tag or a literal value. |
await recipeSetter(recipeGroup, recipeName, device) | Applies the named recipe's set-point values to a device. |
Historical aggregations
Each reduces a tag's stored history over a timeSpan to a single number.
| Function | What it does |
|---|---|
await getSum(tagName, timeSpan, timeReference, startTimes) | Total (sum) of the values in the window. |
await getLastValue(tagNames, timeSpan, timeReference, startTimes) | The most recent value within the window. |
await getMeanValue(tagNames, timeSpan, timeReference, startTimes) | Average (mean) over the window. |
await getMinValue(tagNames, timeSpan, timeReference, startTimes) | Minimum value in the window. |
await getMaxValue(tagNames, timeSpan, timeReference, startTimes) | Maximum value in the window. |
await getDeltaSum(tagNames, timeSpan, timeReference, startTimes) | Sum of incremental increases β ideal for ever-rising counters (energy, pulses). |
await getDiffvalue(tagNames, timeSpan, timeReference, startTimes) | Net change = last β first value across the window. |
await getNegativeVectorSum(tagNames, timeSpan, timeReference, startTimes) | Signed/vector sum that accounts for direction β for import/export-style signed values. |
Interval aggregations
The same reductions, but the window is split into interval buckets and a series is returned
(one result per bucket) β handy for building report rows or trend arrays.
| Function | What it does |
|---|---|
await getMeanValueWithInterval(tagNames, timeSpan, interval, timeReference, startTimes) | Average per interval bucket. |
await getLastValueWithInterval(tagNames, timeSpan, interval, timeReference, startTimes) | Last value per interval bucket. |
await getSumValueWithInterval(tagNames, timeSpan, interval, timeReference, startTimes) | Sum per interval bucket. |
await getMinValueWithInterval(tagNames, timeSpan, interval, timeReference, startTimes) | Minimum per interval bucket. |
await getMaxValueWithInterval(tagNames, timeSpan, interval, timeReference, startTimes) | Maximum per interval bucket. |
await getDeltaSumWithInterval(tagNames, timeSpans, interval, timeReference, startTimes) | Incremental-increase sum per interval bucket. |
await getDiffValueWithInterval(tagNames, timeSpan, interval, timeReference, startTimes) | Net change per interval bucket. |
await getNegativeVectorSumWithInterval(tagNames, timeSpans, interval, timeReference, startTimes) | Signed/vector sum per interval bucket. |
Alarm set-points
Set a tag's alarm threshold values at run-time (e.g. from a recipe or shift schedule).
| Function | What it does |
|---|---|
await setAlarmHiHi(tagName, value) | Set the HIHI (critical-high) threshold. |
await setAlarmHi(tagName, value) | Set the Hi (warning-high) threshold. |
await setAlarmLow(tagName, value) | Set the Low (warning-low) threshold. |
await setAlarmLowLow(tagName, value) | Set the LOWLOW (critical-low) threshold. |
Utilities & integration
| Function | What it does |
|---|---|
await getOnlineStatus(tagName, timeInSeconds) | Returns whether the tag has updated within the last timeInSeconds β a freshness/online check. |
await publishMQTT(deviceName, topic, data) | Publishes a custom message to the MQTT broker on the given topic. |
await writetimeline(deviceName, event, description, color) | Writes an event entry (with a colour) to a device's timeline/event log. |
await asciiConverter(data) | Converts data to/from its ASCII representation. |
await ping(ip/url) | Checks whether a host or URL is reachable. |
await sleep(time ms) | Pauses the script for the given number of milliseconds. |
await print(value) | Outputs a value to the Test Script log panel β your main debugging tool. |
Email & notifications Licensed
These two appear in the Function list only when enabled in your licence.
| Function | What it does |
|---|---|
await sendEmail(to/UserGroup, cc, subject, body, fileNameWithPath, attempt) | Sends an email (optionally with an attachment by path) to an address or user group; attempt controls retries. Requires the Email feature. |
await sendAppNotification(messageType, UserGroup, title, body) | Pushes an in-app notification to a user group. Requires the Notification feature. |
write, increase,
recipeSetter, the setAlarmβ¦ setters, publishMQTT) change the live system β
use Test Script and read the log before enabling the script.Schedulers Admin
A Scheduler automatically drives a Parameter value on chosen days within a daily time window β ideal for "on during working hours" style control (lighting, HVAC, pumps) without writing any code. Open Scheduler Management; each row shows Schedule Name, Parameter, Status, Days, Start Time, Stop Time.
1
2
3
4
5
6
7
8
- 1 Scheduler menu β under Automation & Logic.
- 2 Create Schedule β add a new schedule (opens this dialog).
- 3 Schedule Name.
- 4 Devices β which device(s) to drive.
- 5 Parameters β the parameter value the schedule controls.
- 6 Start Time / Stop Time β the daily on/off window.
- 7 Days β the days of the week it runs (SunβSat).
- 8 Status (Active / Deactive), then Create to save.
Creating a schedule
- Click Create and give the schedule a name (stored UPPERCASE).
- Pick the Device(s) and the Parameter to drive.
- Select the Days of the week it should run.
- Set the Start Time and Stop Time for the daily window.
- Set Status to Active and save. MatrixIQ warns you if it overlaps an existing schedule on the same parameter/days/time.
Parameters & Recipes Admin
Parameters
A Parameter is a logical measurement name β e.g. VOLTAGE L-N AVG, REAL POWER TOTAL β that you map onto the physical tag carrying that reading on each device. Bind a widget, report column, scheduler or script to the parameter and it automatically follows the correct tag on every device. This is what makes templates and multi-device reports possible.
- Create on the fly β the easiest way: while creating a tag (Tag editor β Select Parameter), pick an existing parameter or type a New Parameter Name to add one right there. The tag is linked to it immediately.
- Predefine Parameter Management β a central screen to view/add parameters up front, if you prefer to define them before tagging.
- System Import β bulk-load the standard energy-meter parameter set (voltages, currents, power, energy, power-factor, THD, demandβ¦) instead of typing them.
Recipes
A Recipe Group is a named set of target/setpoint values for a product or batch. Operators select a recipe on a dashboard and the system applies/compares those targets. Recipes are surfaced through dashboard widgets:
- Recipe Selector widget β lets an operator choose the active recipe group on screen.
- Recipe Settings / Download widget β view and manage the recipe's parameter values.
- Recipes can also be referenced inside global scripts via Insert β Recipe.
Alarms & Rules Both
Alarms watch your tags and raise an event when a value crosses a limit. There are two levels:
- Alarm β a named container (the "what we're watching", e.g. High Temperature). Open Alarm Management to create one; each row has an Add Rule action.
- Alarm Rule β the actual condition(s) under an alarm.
1
2
3
4
5
6
7
8
- 1 Alarms & Notifications menu.
- 2 Create β add a new alarm rule.
- 3 Rule Name.
- 4 Bind to a Tag, or a Device + Parameter (so the rule works across devices).
- 5 Interlock Tag β only alarm while this parent tag is active (suppresses nuisance alarms).
- 6 Hi / HiHi / Low / LowLow β tick the bands you need, set their values and optional aliases.
- 7 Notification / Email (to a User Group) and Timeline β how the trip is announced and logged.
- 8 Create β save the rule.
Creating an alarm rule
- From an alarm, click Add Rule and give the Rule Name.
- Bind it to Tag(s), or to a Device + Parameter (so the same rule works across devices).
- Set the threshold values you need β Hi, HIHI, Low, LOWLOW β each with an optional Alias (a friendly message such as "Warning" / "Critical").
- Optionally pick an Interlock Tag (parent condition) β the alarm only fires while that tag is in the active state, which suppresses nuisance alarms (e.g. only alarm on temperature while the machine is running).
- If licensed, choose a User Group to receive an email and/or an app notification when the rule trips.
- Save. Live alarms appear on the alarm screens/widgets where operators can acknowledge them.
Escalation & Notifications Admin
An Escalation makes sure an unacknowledged alarm reaches the right people in stages. Open Alarm Escalation and create a chain:
- Give the escalation a name and set Type = ALARM.
- Pick the Group / Alarm and the specific Rule it applies to.
- Add escalation levels β each level has a Delay Time (minutes) and a User Group. If the alarm is still unacknowledged after the delay, the next group is notified.
Email & notification setup
For alarm emails, scheduled reports and script emails to work, configure delivery once under Email Settings:
- SMTP β Service Type / Host Name, Port, and Username (from-mail) / password.
- AWS SES β Access Key ID, Secret Access Key, region and apiVersion.
Scheduled emails
The Emails screen (Alarms & Notifications β Emails) sends automated emails on a schedule β for example a Daily Report delivered every morning, or an alarm digest. Click Create Email and configure it:
1
2
3
4
5
6
7
8
9
- 1 Emails menu β under Alarms & Notifications.
- 2 Create Email β schedule a new automated email.
- 3 Email Name (and Email Subject below it).
- 4 Email Schedule Type (Dailyβ¦) and Time β how often and when it's sent.
- 5 Select Report β the Reports / alarm bundles to attach (e.g. Daily Report, Voltage Alarms).
- 6 Active / User Group β enable it; tick User Group to send to a group instead of typed addresses.
- 7 Email To β recipient address(es).
- 8 Email CC β cc address(es).
- 9 Message body β then Update / Create to save. The list shows each email's Day & Time and Status (Scheduled).
App/push notifications are sent to User Groups and require the notification feature in your licence.
Reports Both
Reports turn historical tag data into Excel and PDF documents, generated on a schedule and optionally emailed out. Open Reports Management; each row shows the Report Name, its Start Time and a Report Config action.
1
2
3
4
5
6
7
8
9
- 1 Reports menu β under Reporting & Analysis.
- 2 Create Report β add a new report.
- 3 Report Name.
- 4 Start Time β when the report is generated each cycle.
- 5 Default Interval β data resolution (1 min β¦ Month).
- 6 Excel template β the uploaded
.xlsxwhose blank cells get filled; use Choose File to replace it. - 7 Download Options β Excel and/or PDF output.
- 8 PDF Report Config β page numbering (Page / Page of / None) + header/footer Labels with
$name/$email/$date/$timeplaceholders at chosen positions. - 9 Update / Create β save the report.
Creating a report
- Click Create Report, enter a Report Name and a Start Time (when the report is generated each cycle).
- Set the Default Interval β the data resolution:
1 / 5 / 10 / 15 / 30 min,Hour,Day,WeekorMonth. - Tick the output format(s): Excel and/or PDF.
- Upload your Excel template (
.xls/.xlsx) β this is the heart of a customised report (see below). - If you ticked PDF, set the PDF Report Config (page numbering & header/footer β see below). Click Create.
Customised reports from an uploaded Excel template
Instead of a fixed layout, MatrixIQ builds each report into your own Excel workbook. You design the spreadsheet exactly how you want it β logo, headings, fixed text, formulas, merged cells, formatting β leaving empty cells where live data should land. MatrixIQ then fills those cells from your tags every time the report runs. The result always matches your house style.
Step 1 β Design & upload the template
- In Excel, lay out the workbook (you can use multiple sheets β e.g. Daily, Monthly). Put your static content (titles, units, headings, company logo, calculation formulas) wherever you like.
- Leave the cells that should receive data blank, and note their addresses (e.g.
B5, the column under a heading, a row beside a label). - Save and upload it as the report's template (the file picker accepts
.xls/.xlsx).
Step 2 β Open Report Config and pick a sheet
From the report's Report Config action you reach the rule page. First use Select sheet to choose which sheet of your workbook you're mapping; the rule tools only appear once a sheet is selected. Each rule you add is listed with its Rule Name, Rule Type and Location.
Step 3 β Add rules that place data into cells
The Report Config menu offers four rule types β pick the one that matches the shape of the area you're filling:
| Rule type | Fills⦠| You specify |
|---|---|---|
| Cell Config | One single cell. | Cell Address (e.g. B5), the Tag, a TimeSpan, and the Rule (aggregation). |
| Row Config | A row, filling across columns over time. | Row No., Start Column, Tag, TimeSpan, Rule and a TimeInterval β each interval bucket lands in the next column across. |
| Column Config | A column, filling down rows over time. | Column, Start Cell, Tag, TimeSpan, Rule and a TimeInterval β each interval bucket lands in the next cell down. |
| Table Config | A whole tabular block. | Table Type (Device table, TagGroup, Timeline or Token), the table/source, a Start Cell and TimeSpan. |
Here is a Cell Config rule being edited on the COST_ANALYSIS sheet β the rule list shows
each rule's Location (the cell it fills):
1
2
3
4
5
6
7
8
9
- 1 Select sheet β which sheet of your workbook you're mapping.
- 2 Rule list β each rule's Name, Rule Type (Cell) and Location (the cell it fills, e.g. C3, B7).
- 3 Rule Name.
- 4 Cell Address β the exact cell the value lands in (e.g.
C7). - 5 Select Tag β the tag / parameter whose data fills the cell.
- 6 Select Rule β the aggregation (Last, Average, Sum, Min, Maxβ¦).
- 7 Select TimeSpan β the period (Today, Yesterdayβ¦).
- 8 Value / TimeStamp β output the value or its timestamp.
- 9 Condition Color β turn on conditional formatting (setpoint + colour).
Step 4 β Choose what value lands and how it's calculated
For each rule:
- Tag β the tag, memory tag, parameter or system tag whose data fills the cell(s). Bind to a Parameter to make the report reusable across devices.
- TimeSpan β the period each value covers (the same options as elsewhere:
1 min β¦ 24 hour completed, Today, Yesterday, Week, Month, Year). - Rule (aggregation) β how the period is reduced to a number: Average, Min, Max, Difference, Delta Sum, Last, Sum, Negative Vector.
- TimeInterval β (Row/Column) the bucket size used to step across/down, so a window is broken into a series of cells.
- Write β output the Value or its TimeStamp.
Step 5 β (Optional) conditional formatting
Any rule can colour its cell based on a Setpoint + Condition (< > >= <= == !=):
set a Font Color and Background Color that apply when the condition is met β e.g. turn a cell red when
a value exceeds its limit. This makes exceptions jump out in the finished sheet.
PDF header/footer & page numbers
When PDF is enabled you can add up to 6 header/footer lines, each with a Label and a position
(Top/Bottom Γ Left/Center/Right). Labels support placeholders that are filled at generation time:
$name (user name), $email, $date, $time. Page numbering can be
Page, Page of or None, at a chosen position.
Reuse, test & deliver
- Test β use the Test action on the rule page to generate the report now and confirm every cell is filled correctly before relying on the schedule.
- Import / Export β export a sheet's rule set as a
.jsonfile and import it into another report to reuse your mapping. - Delivery β once it tests clean, the report runs automatically from its Start Time at the Default Interval and can be emailed to recipients (configure mail under Email Settings).
Downtime & KPIs Both
The Downtime Reporting System (DTRS) captures why equipment stopped and turns it into KPI reports. Its management screen is organised into tabs:
| Tab | Purpose |
|---|---|
| Cause Lists | Maintain the master list of downtime causes/reasons operators can pick from. |
| Rules | Define what counts as downtime β the tag + set point that marks a stop, the cause list it uses, and its timing/ticket settings. |
| Acknowledge Dashboard | Where operators tag each downtime event with a cause. |
| Reporting Dashboard | Date-wise / frequency downtime reports for analysis (Pareto of causes, totals). |
Operators acknowledge stoppages on the Acknowledge Dashboard, assigning a cause to each event; the reporting dashboard then summarises downtime by cause and period.
1
2
3
4
5
6
7
8
- 1 Downtime Report menu β under Reporting & Analysis.
- 2 Tabs β Cause Lists, Rules, Acknowledge Dashboard, Reporting Dashboard.
- 3 Create Rule β define a new downtime rule.
- 4 Token Name / Description / Select Tag (+ Set Point) β the rule's id and the tag it watches.
- 5 Select Cause List β the causes operators choose from for this rule.
- 6 Ignore Time / Ticket Validity / Ticket Edit Time β debounce and ticket lifetimes.
- 7 Script Execution Time β when the rule runs.
- 8 Update / Create β save the rule.
KPIs
The KPI module builds dashboards that roll your tags up into key performance indicators (availability, consumption per unit, efficiencyβ¦), designed in the same builder as normal dashboards.
Ticket Manager Both
The ticketing modules turn problems into trackable maintenance jobs. There are a few co-operating pieces:
| Module | Role |
|---|---|
| Ticket Creator | The rules/definitions that automatically raise tickets from breakdown conditions. |
| User Ticket User | Where an operator manually raises a ticket β pick the Maintenance, the Device, the Breakdown Type (Full / Partial Breakdown) and the User Group to assign it to. |
Together they cover the life-cycle: a fault is detected (automatically or reported by an operator) β a ticket is created and assigned to a user group for action.
Integrations Admin
MatrixIQ connects outward in three ways:
Node-RED
NodeRed Management lets you build low-code automation flows alongside the platform (transform data, bridge to other systems, custom logic) without changing MatrixIQ itself. Requires the Node-RED feature in your licence.
API access
API Management shows your installation's API token with a one-click copy. Pass that token to external applications so they can read your data over the MatrixIQ API. Treat the token like a password β anyone holding it has API access. Requires the API feature in your licence.
OPC-UA Server
As covered under System Configuration β OPC-UA Server, MatrixIQ can publish its tags to external OPC-UA clients β the standard way to feed another SCADA, MES or historian.
User Management & Licensing Admin
The Admin account owns the system and builds everything; the Users the Admin creates are the people who actually run the plant day-to-day. The two login kinds are chosen on the sign-in page: the single Admin, and the Users.
1
2
3
4
5
6
7
8
9
- 1 User Management menu.
- 2 Add User β create a new login.
- 3 Email / Password β credentials (the eye toggles visibility).
- 4 Name, Mobile, Department, Address β contact details.
- 5 security level β 1β10 privilege rank.
- 6 Activation Type β validity: Unlimited (no expiry) or Limited (+ Activation Days).
- 7 Session β auto-log-out after an idle timeout.
- 8 Link Dashboard β assign which dashboards this user sees (their runtime menu).
- 9 User Groups β create groups (Add User Group); used by alarms, reports and notifications.
Creating a user
Open User Management β Add User and fill in:
| Field | Meaning |
|---|---|
| Email / Password | The login credentials (validated for strength). |
| Name, Mobile, Department, Address | Contact / identification details. |
| Security Level | A number from 1β10 that ranks the user's privilege. Widgets, write actions and screens can require a minimum level, so higher numbers unlock more. |
| Status | Active / inactive β only active users can log in, and only active users count against the licence (see below). |
Validity (Activation Type)
Each user has a validity set by the Activation Type:
- Unlimited β the account never expires.
- Limited β the account is valid only for a set number of Activation Days; after that it expires and must be renewed. Ideal for contractors or temporary operators.
Session timeout
Turn on Session to auto-log-out a user after an idle period β set the idle Time (min) (e.g. 1, 2, 5, 10, 15, 20, 25, 30). This protects an unattended operator station: after the timeout the runtime locks and the user must sign in again.
Linking dashboards to a user (the runtime menu)
Creating the login is only half the job β you then decide which dashboards that user can open. From a user's row choose Link Dashboard and Assign New Dashboard. This builds the menu the operator sees in their runtime. Each assignment has a Dashboard Type:
| Type | What it is | You provide |
|---|---|---|
| Static | A menu label / folder β a heading to group entries under. It isn't a screen itself; it organises the menu so a long list stays tidy. | Just a name. |
| Dynamic | A real, clickable dashboard the user opens. If it's a template screen, you also bind it to a specific device so the same template serves the right data. | Select Dashboard (and, for a template, Select Screen + Device Name), plus an optional Alias Name. |
Aliasing the menu entry
The Alias Name is the friendly label the user sees in their menu instead of the dashboard's real
name. So one master dashboard called FEEDER_TEMPLATE_V2 can appear to operators simply as
βFeeder 1β, βFeeder 2β, etc. β each alias pointing at the same template bound to a different device.
If you leave the alias blank, the real dashboard name is shown.
1
2
3
4
5
6
7
8
- 1 Set dashboard for β the user whose runtime menu you're building.
- 2 Link Dashboard β open the Assign New Dashboard dialog.
- 3 Save Dashboard β save the menu.
- 4 Dashboard Type β Static (a menu folder/heading) or Dynamic (a real screen).
- 5 Select Dashboard β the dashboard/template to show (for Dynamic).
- 6 Alias Name β the friendly label the user sees instead of the real dashboard name.
- 7 Static entries β section headings (here in red) that group the menu, e.g. Reports, Analysis, HVAC.
- 8 Dynamic entries β the actual dashboards the user opens, nested under a heading with their aliases (e.g. Daily Report).
User Groups
A User Group (give it a Group Name and add members) is how alarms, escalations, reports and script notifications address people β you send to a group, not to individuals, so membership changes don't break your alerts.
Licensing
What your installation can do is controlled by its licence (visible on the Admin profile). The licence defines:
- Active-user limit (
userCount) β you can't activate more users than the licence allows; deactivate one to free a slot. Activation/expiry is governed by activation date + activation days. - Enabled drivers β exactly which protocols appear in the Connections type list.
- Feature flags β each major module is individually licensed: Email, App Notifications, MQTT Server, OPC-UA Server, Downtime, API access, Node-RED, Templates, and the AI features.
Admin & Backups Admin
The Profile Management screen (Admin profile) is the system's control panel β your details, look & feel, backups and software updates.
1
2
3
4
5
6
7
- 1 Auto Backup β schedule automatic database backups (Local / Cloud FTP).
- 2 Select Theme β the application accent colour.
- 3 Actions β software Updates (FDM Auto-Updater) and password change.
- 4 Profile details β email, name, contact, state/country and TimeZone.
- 5 Select Font β the application font family.
- 6 License Details β validity (activation / expiry), enabled drivers, Users Limit, and the per-module feature flags (Email, App Notifications, MQTT / OPCUA Server, Downtime, API, Node-RED, Templates, AI).
- 7 About Us β Company Name, Heading (the brand shown in the sidebar, e.g. CSPL) and the FDM version.
- Profile details β name, mobile, contact and "About Us" information, and password change.
- Select Theme β pick the application's accent colour (the readable font colour is chosen automatically) and a font family.
- Auto Backup β open the backup configuration (below).
- Updates β the FDM Auto-Updater checks for and installs new software versions.
Auto-Backup configuration
Open Profile β Auto Backup to schedule automatic database backups so you never lose configuration or history:
| Setting | Meaning |
|---|---|
| Storage type | Local (a directory on the server) or Cloud (FTP) (uploaded to an FTP server). |
| Backup Frequency | Daily or Monthly. |
| Execution Time / Start Date & Time | When the backup runs each cycle (a daily time, or a start date-time for monthly). |
| Storage Path / Directory | (Local) where backup files are written. The path is validated before saving. |
| FTP Host / Port / User / Password | (Cloud) the FTP destination credentials (default port 21). |
| Retention Files | How many backup files to keep before the oldest is removed (default 3). |
1
2
3
4
5
6
7
- 1 Select Storage Location β Local (a server directory) or Cloud (FTP).
- 2 Backup Frequency β Daily or Monthly.
- 3 Execution Time β when the backup runs each cycle.
- 4 Storage Path / Directory β (Local) where the backup files are written. (For Cloud, FTP Host/Port/User/Password appear here instead.)
- 5 Verify Path β check the path / FTP credentials are valid before saving.
- 6 Retention Files β how many backups to keep (default 3).
- 7 Save Backup Configuration β save it (enabled once the path is verified).
Glossary
Key terms used throughout MatrixIQ and this manual:
| Term | Meaning |
|---|---|
| Connection | A link to a system over a protocol (Modbus, OPC-UA, MQTTβ¦). Devices live under it. |
| Device | A unit you read from (a meter, PLC, sensor) under a connection. |
| Poll | A read instruction β what registers/addresses to read from a device and how often. |
| Tag | One data point with a live value, time, status and data type. |
| Memory Tag | A virtual tag whose value is set internally (scripts, manual entry, calculations) rather than read from a device. |
| Parameter | A logical measurement name (e.g. VOLTAGE L-N AVG) mapped to the physical tag carrying it on each device β the basis of templates and multi-device reports. |
| Tag Group | A reusable named set of tags. |
| Dashboard / Screen | A configurable canvas of widgets bound to tags. |
| Widget | A single dashboard element β gauge, chart, table, button, image. |
| Template | A dashboard built against parameters so it can be reused across many devices. |
| Realtime vs Historical | A widget either streams live values (via the MQTT broker) or queries stored history. |
| Benchmark / Set-point | A reference value/line a widget compares the live value against. |
| Alarm / Rule | A watched condition (Hi/HIHI/Low/LOWLOW thresholds) that raises an event. |
| Escalation | A staged notify chain for unacknowledged alarms. |
| Recipe | A named set of target/setpoint values for a product or batch. |
| Job | A tracked production run measured against a recipe and target. |
| Security Level | A 1β10 privilege rank on each user; actions/screens can require a minimum level. |
| SCADA | Supervisory Control And Data Acquisition β monitoring and control of industrial processes. |
| MQTT | A lightweight publish/subscribe messaging protocol; MatrixIQ uses it to push live tag values to dashboards. |
| OPC-UA | An industrial interoperability standard; MatrixIQ can be both a client (reading) and a server (publishing). |
Troubleshooting
Common issues and where to look first:
| Symptom | Likely cause & fix |
|---|---|
| A connection stays Offline | Device/endpoint unreachable, wrong IP/port/COM/unit-ID, mismatched serial parameters, or the connection is set to Deactive. See Connections. |
| No live data on realtime widgets | Check the widget's Type = Realtime and that it's bound to a tag; then check the system MQTT broker in App Settings (historical/report data uses the database and is unaffected). |
| Numbers look garbled (huge/tiny/jumpy) | Wrong register word/byte order β try the matching β¦Swap data type; check scaling (min/max raw vs scale) and multiplier/offset. |
| Locked out / "3 attempts" | User accounts are blocked after 3 failed sign-ins; the Admin unblocks them in User Management. |
| Can't activate a user ("limit exceeded") | You've hit the licence's active-user count β deactivate another user or upgrade the licence. |
| A module is missing from the menu | That feature isn't enabled in your licence β contact your supplier. |
| Report / alarm email not arriving | Check Email Settings (SMTP / SES) and that the recipient User Group is set on the report/rule. See Email & notification setup. |
| A widget won't save / persist | Make sure you clicked Save (or Ctrl+S) in the builder; required config fields (e.g. a bound tag) must be filled. |
| Backup not appearing | Verify the storage path / FTP credentials in Auto-Backup (the path is validated on save) and that the frequency/time has elapsed. |