What readers receive
A quality dashboard subscribes over MQTT and a reporting job calls the API. Today each must know that Line 4 sends °F and convert it itself. Once the topic has a meaning, both receive °C with the unit attached.
- MQTT
- value, unit, property
- REST
- POST /api/v1/uns/data/latest
- Trust
- How each value was served
- Editions
- Foundation, Enterprise, free trial
The problem
Every reader of Line 4 carries its own copy of "this one is °F": the dashboard, the report script, the export to the quality system. Each converts a little differently, and the day the device is replaced by one that sends °C, every copy is wrong.
What you will get
From the moment the meaning takes effect, MaestroHub converts once, on the way in. The topic's MQTT message carries the converted value, its unit and the meaning, and the REST API answers the same value with its unit and a trust mark. An unbound topic's messages stay exactly as they were.
Before you start
- A topic with a meaning. See A line sends another unit.
- To read over MQTT, a client of the built-in broker allowed to read the topic, for example an API client with the Data Stream Viewer role.
- To call the REST API, a token: an OAuth2 client or a personal access token, and your workspace's id (REST API Integration).
- Edition. Foundation, Enterprise, and the free trial.
What the device sends
Line 4's gateway sends the number as it always did, in °F:
{ "path": "f4/ProductTemp", "value": 40.9 }
What an MQTT reader receives
A subscriber to mHv1.0/<workspace>/trabzon/filling-hall/line-4/f4/ProductTemp receives the converted value, the unit, and the meaning's property id (provenance folded here for space):
{
"value": 4.777777777777779,
"timestamp": "2026-11-03T04:54:55.001Z",
"unit": "°C",
"property": "9351999f-847a-48d3-841d-f7c42f949912"
}
unitis the meaning's unit. For a topic that sends an object,unitsgives one per field instead.propertyis the id of the property the value carries (Product temperature). For an object topic,propertiesgives one per field.- Both are absent on a topic without a meaning, so existing subscribers see the same bytes as before.
What the REST API answers
curl -s -X POST "https://<your-host>/api/v1/uns/data/latest" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Workspace-ID: <your-workspace-id>" \
-H "Content-Type: application/json" \
-d '{"topics": ["mHv1.0/<workspace>/trabzon/filling-hall/line-4/f4/ProductTemp"]}'
The answer, shortened:
{
"records": {
"mHv1.0/<workspace>/trabzon/filling-hall/line-4/f4/ProductTemp": {
"value": 4.944444444444443,
"timestamp": "2026-11-03T04:54:50.000Z"
}
},
"denied": [],
"semantics": {
"mHv1.0/<workspace>/trabzon/filling-hall/line-4/f4/ProductTemp": {
"unit": "°C",
"trust": "translated"
}
}
}
topicstakes up to 500 versioned topic names. Topics you may not read are listed indenied.semanticsis present only for topics with a meaning.trustsays how the value was served:translated: converted on the way in, under the meaning in force.converted_before_binding: stored as the device sent it before the meaning existed, converted when read.untranslated: could not be converted; served as sent, with Bad quality.
- History reads (
POST /api/v1/uns/data/range) mark each stretch of time the same way, so a chart can show where the meaning starts.
Check the result
Subscribe with any MQTT client and compare the device's number with the one you receive: 40.9 °F is 4.9 °C. Then run the curl above: the same topic answers in °C with "trust": "translated".
Good to know
- Readers that already convert must be told the unit changed, or they convert twice. When you give the meaning, the page lists the pipelines, dashboards and apps that read the topic and asks you to confirm you have checked them.
- Converted values carry floating-point tails (
4.944444444444443). Round them where you show them. - Values stored before the meaning are never rewritten; reads convert them and mark them
converted_before_binding.