In-house
Runs entirely in-house, no data with third parties.
Client project · IoT · On-premises
An IoT platform that does not run in someone else’s cloud but directly in the client’s own data centre. The devices report their readings over MQTT to a broker the client owns. A Laravel application evaluates them in real time and shows the service team which device needs attention.
Key facts
Data flow
SchematicField devices
The client’s data centre
MQTT broker
receives the readings
Real-time evaluation
Laravel application
evaluating nothing unusual Alert for device 03
Service view
No data with third parties
Schematic: device numbers, messages and states are made up. They show the principle, not the client’s data or set-up.
The picture shows the path schematically. Field devices report their readings over MQTT to a broker the client owns, a Laravel application evaluates them in real time, and the service view marks the device that needs attention, here device 03. The platform runs in the client’s own data centre. The third-party cloud receives no data.
From the field into the client’s own data centre. In real time.
elsyQ built the platform for a measurement equipment manufacturer. The result comes down to three points. What the terms behind them mean is explained further down the page.
Runs entirely in-house, no data with third parties.
Real-time evaluation with alerts for the service team.
Role-based and multi-tenant, with an audit trail.
A reading on its way: from the field device to the service team.
MQTT decouples sender and receiver. A device sends its message to the broker, and the broker passes it on to every client with a matching subscription. The device does not need to know who is listening.
Device
The device sends a message to the broker. It carries a topic, which is a path made of levels, and the payload.
tenant-a/site-1/device-03/reading {
"device": "device-03",
"value": 80.9
}
MQTT does not prescribe a payload format. JSON is only an example here.
Broker
The broker compares the topic with its clients’ subscriptions and passes the message on to every client whose subscription matches.
tenant-a/+/+/reading
matches
tenant-a/site-1/device-03/reading
Laravel application
The Laravel application evaluates the readings in real time. In this example a simple rule checks an upper limit.
Example rule: alert above 80%, cleared only at 75% or below
Reading 80.9% is above 80%.
Laravel application
In the example the value is above the limit. That turns into an alert for the service team, and it stays active until the value has dropped far enough.
Service team
The application shows the service team which device needs attention. A reading has turned into something a person can act on.
Device 03 needs attention
Example: topic, payload, subscription and rule are made up. They show how a reading can travel over MQTT, not how the connections in the project are built.
The server every message passes through. Devices and applications connect to it, not directly to each other.
Whoever sends publishes under a topic. Whoever wants to receive subscribes to topics. Sender and receiver do not need to know about each other.
MQTT was designed for devices with little computing power and for unreliable networks. The fixed header of a message takes only two to five bytes, and each client keeps a single connection to the broker.
A topic is a path of levels separated by slashes. A subscription may contain wildcards. A + stands for exactly one level. A # may only come last and covers any number of levels from that point on, including none.
Structure of the example topic
tenant-a
Tenant
site-1
Site
device-03
Device
reading
Message type
| Topic |
Filter 1
tenant-a/
|
Filter 2
tenant-a/
|
Filter 3
+/
|
|---|---|---|---|
tenant-a/
|
matches | matches | does not match |
tenant-a/
|
matches | matches | matches |
tenant-a/
|
matches | does not match | does not match |
tenant-a/
|
does not match | matches | matches |
tenant-b/
|
does not match | does not match | does not match |
tenant-b/
|
does not match | does not match | does not match |
The hierarchy is made up and only shows the principle. MQTT merely specifies that levels are separated by slashes; what they are called and in which order they come is up to each system.
How reliably a message arrives is set in MQTT by its quality of service, QoS for short. More reliability costs more packets.
at most once
PUBLISH
Sent once, without acknowledgement. If the connection drops, the message can be lost.
at least once
PUBLISH
PUBACK
The sender keeps the message until PUBACK arrives and sends it again after a dropped connection. That is why it can arrive twice.
exactly once
PUBLISH
PUBREC
PUBREL
PUBCOMP
Four packets in two round trips. With PUBREC the receiver confirms receipt and remembers the packet identifier. With PUBREL the sender releases the message, and PUBCOMP completes the exchange. If a retry makes the message arrive twice, the receiver recognises it by its identifier and delivers it only once. It is the most expensive level.
The level applies per hop: from the publisher to the broker, and from the broker to each subscriber. A subscriber receives at most the level it subscribed with. Retries at QoS 1 and 2 only happen if the session outlives the dropped connection. All of this describes MQTT in general; this page does not say which levels the project uses.
Evaluated live. An alert as soon as a device needs attention.
The Laravel application evaluates the readings in real time, and the service team gets alerts. The illustration below shows what an alert rule can look like, for example: an upper limit with hysteresis.
When a value hovers just around the limit, a simple rule keeps switching the alert on and off, and whoever handles the alerts gets one message after another. With hysteresis, an alert only ends once the value has dropped a fixed margin below the limit. A burst of alerts becomes a single one.
No alerts in the readings shown.
Limit 80%, hysteresis 5 percentage points. Alerts across all readings: 1, still active: 1.
| Limit | with hysteresis | without hysteresis |
|---|---|---|
| 70% | 3 | 7 |
| 75% | 3 | 5 |
| 80% | 1 | 3 |
| 85% | 1 | 8 |
| 90% | 2 | 2 |
Four sample devices deliver 120 synthetic readings each. Device 03 starts rising at reading 61, crosses the limit of 80% at reading 82 and stays in alert until the end, peaking at 90.8%. Device 02 comes as close as 78.2% without crossing the limit. Alerts with hysteresis: 1, without hysteresis: 3.
Illustration with synthetic data: 120 readings per device, generated from a fixed formula. The limit rule is a teaching example, not the project’s alert logic.
Own data centre, own data, no one else’s cloud.
On-premises generally means that software runs on servers a company operates itself rather than with a cloud provider. That is how this platform runs: in the client’s own data centre.
In the field
Field devices reporting over MQTT
The client’s data centre
Outside
Third-party cloud
no data
Schematic drawn from the project’s key facts, not a network diagram.
On-premises in general
Whoever runs the servers decides where the data lives and who can reach it. The timing of every update is the operator’s call as well.
What a cloud provider would otherwise take care of sits with the operator: updates, backups, monitoring. That belongs in the plan from the start.
On-premises does not mean sealed off. Devices in the field still have to reach the servers in the data centre, and that route needs planning.
These three points apply to on-premises operation in general. How the network and operations look in the project does not belong on a public page.
Roles and tenants separate who sees what. The audit trail keeps the record.
The platform is role-based and multi-tenant, with an audit trail. What the three terms mean in general:
| Device | Tenant | State |
|---|---|---|
| Device 01 | Tenant A | normal |
| Device 02 | Tenant A | normal |
| Device 03 | Tenant A | needs attention |
| Device 04 | Tenant A | normal |
| Device 11 | Tenant B | normal |
| Device 12 | Tenant B | normal |
| Device 13 | Tenant B | normal |
| Permission | Service | Administration |
|---|---|---|
| View devices and readings | allowed | allowed |
| See alerts | allowed | allowed |
| Manage users and roles | not allowed | allowed |
| View the audit trail | not allowed | allowed |
No access: in this illustration only administration can see the audit trail.
Illustration with made-up data. The roles and permissions are examples, not the project’s. Entries are numbered consecutively per tenant, so a missing number stands out at once.
Five building blocks, one platform. Each one explained briefly, and where the key facts say something about its use in the project, it is noted alongside.
A PHP framework for web applications. Routing, database access, authentication and authorisation come with it.
In this project The Laravel application evaluates the readings in real time and shows the service team which device needs attention.
A framework for Laravel that builds interactive interfaces from PHP components instead of a separate JavaScript front end. When something happens in the browser, the server re-renders the component and Livewire swaps in only the parts of the page that changed.
Part of the technology stack
The server in the publish-subscribe protocol MQTT. It receives messages and distributes them to the clients that have subscribed to their topic.
In this project The broker the client owns, to which the devices report their readings.
A data store that keeps keys and data structures in memory and can additionally persist them to disk.
Part of the technology stack
Software runs on servers the company operates itself, rather than with a cloud provider.
In this project The platform runs in the client’s own data centre, not in someone else’s cloud.
Independently of this project, elsyQ builds the whole chain between web and hardware: web interface and API in Laravel, connection over MQTT or OPC UA, and the firmware on the device.
Web interface and API
Laravel
Connection
MQTT · OPC UA
Firmware
on the device
The field-device data platform is a client project by elsyQ for a measurement equipment manufacturer: an IoT platform that does not run in someone else’s cloud but directly in the client’s own data centre. The devices report their readings over MQTT to a broker the client owns. A Laravel application evaluates them in real time and shows the service team which device needs attention.
The platform elsyQ built for a measurement equipment manufacturer runs in the client’s own data centre, not in a third-party cloud. It runs entirely in-house, and no data sits with third parties. In general, on-premises means that software runs on servers a company operates itself.
On the platform elsyQ built, the devices report their readings over MQTT to a broker the client owns. In general, MQTT works on the publish-subscribe principle: a device publishes a message under a topic, and the broker passes it on to the clients that have subscribed to that topic.
MQTT is a lightweight publish-subscribe protocol that elsyQ uses to connect devices to applications. Devices and applications do not talk to each other directly but through a broker, which receives messages and distributes them to subscribers by topic. How reliably a message arrives is set by the quality of service, from at most once to exactly once.
On the platform elsyQ built, a Laravel application evaluates the readings in real time and shows the service team which device needs attention. The service team also gets alerts. The rule with a limit and hysteresis on this page is an illustration with synthetic data, not the project’s alert logic.
The platform elsyQ built for a measurement equipment manufacturer is role-based and multi-tenant, with an audit trail. In general, roles define what a user may do. Tenants are customers or units whose data stays separate within the same installation. An audit trail records who did what and when.
elsyQ built the platform with Laravel and Livewire, together with an MQTT broker and Redis. Everything runs on-premises, in the client’s own data centre. Laravel is a PHP framework for web applications, Livewire builds interactive interfaces on top of it from PHP components, and Redis is a data store that keeps its data in memory.
elsyQ builds device data platforms for other devices too. Independently of this project, elsyQ covers the whole chain between web and hardware: web interface and API in Laravel, connection over MQTT or OPC UA, and the firmware on the device. Whether a platform should run in your own data centre or in a cloud is something we settle with you at the start of the project.
Trademark notice Third-party names mentioned here (Laravel, Livewire, Redis, OPC UA) are marks of their respective owners and are used only to identify software or standards. elsyQ is not affiliated with these owners.
Work with us
Tell us which devices you have and what your service team needs to see. We will tell you how we would build it.