Device Identity

How devices are identified across physical labels, APIs, and mesh networks — and how to map between identity systems

Every Haltian IoT device carries multiple identifiers, each used in different contexts. Understanding which identifier to use — and how to map between them — is essential for API integration, field installation, and data analysis.

The Identity Problem

A single sensor might be referenced as:

  • TSPR04EZU31901021 on the QR code sticker
  • 15056570 in Wirepas mesh traffic
  • a3b7c9d0-1234-5678-90ab-cdef01234567 in API responses and MQTT topics

These are all the same device. The platform maps between them, but you need to know which identifier to use in each context.

Identity Types

%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#F6FAFA', 'primaryTextColor': '#143633', 'primaryBorderColor': '#143633', 'lineColor': '#143633', 'secondaryColor': '#C7FDE6', 'tertiaryColor': '#73F9C1', 'clusterBkg': '#ffffff', 'clusterBorder': '#143633', 'edgeLabelBackground': '#ffffff'}}}%%
flowchart TB
    subgraph Manufacturing["fa:fa-industry Manufacturing"]
        IMC["IMC<br/><i>Item Model Code</i><br/>e.g., TSPR04"]
        Serial["Vendor Serial<br/>e.g., EZU31901021"]
        WirepasID["Wirepas Node ID<br/>e.g., 15056570"]
        MAC["MAC Addresses<br/>BLE, WiFi, LAN"]
    end

    subgraph Physical["fa:fa-qrcode Physical Label"]
        TUID["TUID<br/>= IMC + Vendor Serial<br/>e.g., TSPR04EZU31901021"]
        QR["QR Code<br/>Contains TUID + Wirepas ID"]
    end

    subgraph Platform["fa:fa-cloud Platform Registration"]
        UUID["UUID<br/>Haltian IoT Device ID<br/>e.g., a3b7c9d0-..."]
        CustLabel["Customer Label ID<br/><i>Optional, user-assigned</i>"]
        ExtID["External ID<br/><i>Optional, for 3rd-party systems</i>"]
    end

    IMC --> TUID
    Serial --> TUID
    TUID --> QR
    WirepasID --> QR
    TUID --> UUID
    UUID --> CustLabel
    UUID --> ExtID

    style Manufacturing fill:#ffffff,stroke:#143633,stroke-width:2px,color:#143633
    style Physical fill:#ffffff,stroke:#143633,stroke-width:2px,color:#143633
    style Platform fill:#ffffff,stroke:#143633,stroke-width:2px,color:#143633
    style TUID fill:#73F9C1,stroke:#143633,stroke-width:2px,color:#143633
    style UUID fill:#73F9C1,stroke:#143633,stroke-width:2px,color:#143633
    style IMC fill:#F6FAFA,stroke:#143633,stroke-width:2px,color:#143633
    style Serial fill:#F6FAFA,stroke:#143633,stroke-width:2px,color:#143633
    style WirepasID fill:#F6FAFA,stroke:#143633,stroke-width:2px,color:#143633
    style MAC fill:#F6FAFA,stroke:#143633,stroke-width:2px,color:#143633
    style QR fill:#C7FDE6,stroke:#143633,stroke-width:2px,color:#143633
    style CustLabel fill:#F6FAFA,stroke:#143633,stroke-width:2px,color:#143633
    style ExtID fill:#F6FAFA,stroke:#143633,stroke-width:2px,color:#143633

Hardware Identifiers (set at manufacturing)

IdentifierExampleDescription
IMC (Item Model Code)TSPR04Hardware model identifier. Identifies the sensor type.
Vendor SerialEZU31901021Unique serial number per unit.
TUIDTSPR04EZU31901021IMC + Vendor Serial concatenated. Printed on the device label. The primary physical-world identifier.
Wirepas Node ID15056570Unique address in the Wirepas mesh network. Used for mesh routing and raw data topics.
BLE MACAA:BB:CC:DD:EE:FFBluetooth Low Energy hardware address.
WiFi MACAA:BB:CC:DD:EE:FFWiFi hardware address (gateways).
LAN MACAA:BB:CC:DD:EE:FFEthernet hardware address (gateways).

Platform Identifiers (assigned at registration)

IdentifierExampleDescription
UUID (Device ID)a3b7c9d0-1234-...The canonical identifier in Haltian IoT. Used in all API responses, MQTT topics, and data exports. Not printed on the physical device.
Customer Label IDROOM-301-SENSOROptional user-defined label for asset management or integration with external systems.
External IDERP-12345Optional identifier for mapping to third-party systems (ERP, CMMS, etc.).

When to Use Which Identifier

ContextIdentifierWhy
Field installation (scanning device)TUID via QR codePhysically printed on the device. Scan → look up in API.
API queries (Service API, Data API)UUIDThe canonical platform identifier. All queries return UUID.
MQTT topics (Stream API)UUIDTopic path includes the device UUID.
Wirepas binary passthroughWirepas Node IDRaw mesh traffic uses the Wirepas address, not UUID.
Data exports (Parquet files)UUIDThe deviceId column contains UUID.
Third-party integrationsCustomer Label ID or External IDMap to external system identifiers.

Mapping Between Identifiers

The UUID is the hub — you can always go from any identifier to UUID, and from UUID to any other identifier.

From physical label to API

Scan the QR code → extract TUID → query the Service API:

query {
  devices(where: { identifiers: { tuid: { _eq: "TSPR04EZU31901021" } } }) {
    id          # UUID
    name
    identifiers {
      tuid
      wirepasNodeId
      vendorSerial
    }
  }
}

From Wirepas Node ID to UUID

When processing binary passthrough data, map the Wirepas address:

query {
  devices(where: { identifiers: { wirepasNodeId: { _eq: 15056570 } } }) {
    id          # UUID
    name
    identifiers { tuid }
  }
}

From UUID to everything

query {
  devices(where: { id: { _eq: "a3b7c9d0-1234-5678-90ab-cdef01234567" } }) {
    identifiers {
      tuid
      vendorSerial
      wirepasNodeId
      wirepasNetworkId
      bleMac
      customerLabelId
    }
  }
}

For a complete walk-through with QR code parsing, see the Device Lookup by QR Code tutorial.

QR Code Formats

Devices ship with a QR code sticker containing identity data. Three formats exist:

FormatPatternExample
Haltian IoT QRI#{imc},W#{wirepasNodeId},S#{vendorSerial}I#TSPR04,W#15056570,S#EZU31901021
Legacy IMC{vendorSerial},{imc}EZU31901021,TSPR04
Customer LabelSingle value stringROOM-301-SENSOR

The QR code format varies by manufacturing batch. Your application should handle all three formats. See the QR code tutorial for parsing logic.

Legacy vs. Current Identifiers

EraPrimary identifierNotes
Thingsee IoT (legacy)TUIDUsed in MQTT topics and payloads. Printed on device.
Haltian IoT (current)UUIDUsed in all API interactions. Not on device — requires lookup.

The TUID remains important for physical-world workflows (installation, maintenance, troubleshooting) but the UUID is the authoritative identifier for all programmatic interactions.

Next Steps