Thingsee MQTT vs Haltian IoT MQTT
This guide provides a detailed comparison between Thingsee MQTT and Haltian IoT MQTT, helping you migrate your MQTT integrations.
Quick Comparison
| Aspect | Thingsee MQTT | Haltian IoT MQTT |
|---|---|---|
| Authentication | Client certificates (.pem, .key) | API key (username/password) |
| Certificate Management | Renewed by Haltian (12 months) | Self-service via IoT Studio (90 days) |
| Device ID | TUID (in path and data) | UUID (in path only) |
| Topic Structure | Flat with region codes | Hierarchical with event types |
| Data Format | Complex JSON with metadata | Streamlined JSON |
Authentication
Thingsee MQTT
- Uses client certificates (
.pemand.keyfiles) - Certificates provided by Haltian
- No username or password required
- TLS encryption with certificate validation
Haltian IoT MQTT
- Uses API key authentication
- API Key ID as username, API Key Token as password
- No client certificates needed
- TLS encryption
Credentials Validity
| Platform | Validity Period | Renewal Method |
|---|---|---|
| Thingsee | 12 months | Haltian renews; old certs remain valid |
| Haltian IoT | 90 days | Self-service via IoT Studio; old token invalidated |
When a Haltian IoT API key token is refreshed, the previous token becomes invalid immediately.
Device Identifiers
Thingsee
- Uses TUID (Thingsee Unique Identifier) at the API level
- Device QR code and labels show the vendorId (user-friendly identifier)
- TUID appears in both topic path and message data
Haltian IoT
- Uses UUID (Haltian IoT internal identifier)
- UUID is not physically on the device
- UUID appears in topic path only (not in message data)
- Use vendorId (printed on QR code and labels) as the user-friendly identifier
- Use the Service API to map between UUID, vendorId, and TUID
Mapping UUIDs to TUIDs
Use the Service API to query device mappings between UUID and TUID. See the Service API documentation for details.
MQTT Topic Structure
Thingsee Topic Format
cloudext/json/pr/fi/office/TSPR04EZU31901021/2100
| Segment | Description |
|---|---|
cloudext | Fixed prefix |
json | Data format |
pr | Product type |
fi | Region code |
office | Customer identifier |
TSPR04EZU31901021 | Device TUID |
2100 | Message profile ID |
Subscription: cloudext/json/pr/#
Haltian IoT Topic Format
haltian-iot/events/{integration-id}/{api-key-id}/measurements/ambient_temperature/{device-uuid}
| Segment | Description |
|---|---|
haltian-iot/events | Fixed prefix |
{integration-id} | Integration identifier |
{api-key-id} | API key identifier |
measurements | Event kind |
ambient_temperature | Event/measurement type |
{device-uuid} | Device UUID |
Subscription: haltian-iot/events/{integration}/{apikey}/#
Data Payload Format
Thingsee Payload
{
"tsmId": 2100,
"tsmEv": 7,
"tsmTs": 1747646772,
"tsmTuid": "TSPR04EZU31901021",
"tsmGw": "TSGW01ABC12345678",
"ambient_temperature": 23.5,
"humidity": 45.2
}
| Field | Description |
|---|---|
tsmId | Message profile ID |
tsmEv | Event type |
tsmTs | Timestamp (Unix epoch) |
tsmTuid | Device identifier |
tsmGw | Gateway identifier |
... | Measurement values |
Haltian IoT Payload
{
"measured_at": "2025-01-28T08:52:11.626Z",
"value": 23.5
}
| Field | Description |
|---|---|
measured_at | ISO 8601 timestamp |
value | Measurement value |
Haltian IoT uses a streamlined format where context (device ID, measurement type) comes from the topic path rather than the payload.
Key Migration Steps
Get Haltian IoT Credentials
- Obtain API key ID and token from Haltian IoT Studio
- Note your integration ID
Get Device Mapping
- Query GraphQL API for UUID to TUID mapping
- Store mapping for device correlation
Update Connection Code
- Replace certificate authentication with API key
- Update broker hostname and port
Update Topic Subscription
- Change from
cloudext/json/pr/#tohaltian-iot/events/{integration}/{apikey}/#
- Change from
Update Message Processing
- Extract metadata from topic instead of payload
- Parse ISO 8601 timestamps instead of Unix epoch
- Handle streamlined value format
Handle Device Identification
- Map UUIDs back to TUIDs if needed
- Update any device lookup logic
Common Pitfalls
Topic Changes
Thingsee uses a single topic for all measurements (cloudext/json/pr/#). Haltian IoT allows filtering by measurement type in the topic path (e.g. haltian-iot/events/.../measurements/ambient_temperature/#).
Timestamp Format
Thingsee uses Unix epoch timestamps (e.g. 1747646772). Haltian IoT uses ISO 8601 format (e.g. 2025-01-28T08:52:11.626Z).
Device ID Location
In Thingsee, the device TUID is included in the message payload. In Haltian IoT, the device UUID is part of the topic path and not included in the payload.
Next Steps
- Stream API Reference - Full MQTT documentation
- Thingsee Migration - Migration overview and process