Collect, route and transform data
This page explains what happens to the data your devices send: how Fundamentum collects it, routes it to your own systems, and lets you transform it with your own code, without running any server.
Collect
Devices send two kinds of data, over MQTT 5 over TLS or over HTTPS with the Devices API.
| Kind | What it is | What Fundamentum does with it |
|---|---|---|
| Telemetry | Readings in any format: JSON, binary, your own protocol | Passes it through as is to your project's telemetry topic |
| States | Key/value observations, such as "temperature": 21.5, in the Fundamentum states format |
Publishes them to your states topic, and stores their history and latest values |
- State values can be any JSON value: number, string, boolean, object or array. You do not declare state keys in advance; a key exists as soon as a device reports it.
- The Hub charts each device's states, and the Public API returns a device's latest values and its state history.
- State history is kept for three months. For long-term analysis, send your data to Insight.
- A gateway can report states on behalf of its sub-devices and beacons.
Route
Topics
Every project has its own topics on the event bus:
- default topics for telemetry, states and custom actions, which registries use unless you set others;
- your own topics, for your devices, your cloud functions or your systems to exchange messages;
- Fundamentum topics: platform event streams, such as alerts and device changes, that you activate for your project to consume them like your own topics.
Topics are private to their project.
Connectors: data pushed to your systems
A connector delivers your topics to your own systems as data arrives. The device broker stays isolated; your systems never connect to it.
| Connector | Delivers to | Security |
|---|---|---|
| MQTT | Your MQTT broker | Optional username and password |
| MQTTS | Your MQTT broker, over TLS | Mutual TLS (CA, client certificate and key), optional username and password |
| HTTPS | Your HTTPS endpoint (webhook) | Custom authentication header |
Each connector has links that bind one of your project topics to a destination on your system, and the Hub shows whether each connector is connected. WebSocket connectors are on the roadmap.
Inbound flows
Data can also flow into Fundamentum from your systems:
- your broker publishes into a project topic through a connector link;
- your systems POST messages over HTTPS through the Public API.
On demand
Your applications can also pull data when they need it: latest values and state history through the Public API, and analytics in SQL through Insight.
Transform with cloud functions
Cloud functions run your own logic inside Fundamentum, with no server to manage.
- Written in Go, Rust, JavaScript or Python.
- Triggered by an HTTP call, or by a message on a topic. A function triggered by a topic can publish its result to other topics of its project.
- Use cases: decode proprietary payloads, enrich messages, route them to other topics, and encode actions for your devices (functions used this way are your encoders).
- Sandboxed execution: each function runs isolated, with an execution time limit, and can only publish to its own project's topics.
- Execution history: each run's logs and statistics are kept and available through the API.
- Scaling: by default, a function runs one invocation at a time; you can give it a pool of workers to run invocations in parallel.
You write, upload and invoke functions with the fun CLI, the Hub or the Public API.