UniteLabs
Concepts

Connector

What a connector is, how it is identified, and how its capabilities are organized.

A connector is a standalone application that represents a single lab instrument in UniteLabs. It runs on the edge machine — the computer physically connected to the instrument — and exposes the instrument's capabilities through a structured, typed, and introspectable API that GroundControl, the UniteLabs SDK, and the REST API can all call.

Terminology

UniteLabs uses one set of labels for connector capabilities across every surface — the platform UI, the Python SDK, the REST API, and GroundControl.

Docs conceptUI labelPython SDKREST API
ModuleModule.modules/modules
Property action (scalar read)Propertyaction with type=PROPERTY/actions (filter type=PROPERTY)
Sensor action (stream)Sensoraction with type=SENSOR/actions (filter type=SENSOR)
Control action (trigger)Controlaction with type=CONTROL/actions (filter type=CONTROL)
Subscriptionlive-stream panel on Sensorasync for/subscriptions

Every action has a type: Property (read a scalar once), Sensor (subscribe to a stream), or Control (trigger an action). The UI groups actions into three sections by type; the SDK and REST API expose the type as a field on each action.

In the REST API a connector itself is called a service (endpoint: /v1/services). In this documentation we use "connector" because it is the term the product is built around — the Connector Development Kit, the connector registry, and GroundControl's Connectors tab all use it. Mentally: service = connector instance.

Identity

Every connector has four pieces of identity:

FieldDescription
NameHuman-readable label, e.g. Hamilton STAR (Bench 3)
UUIDStable unique identifier — assigned on first start and never changes
TypeThe instrument category, e.g. liquid_handler, balance, thermocycler
VersionThe connector software version

The UUID is how the UniteLabs SDK and REST API reference a specific connector instance. The name is what appears in GroundControl and the platform UI.

Modules

A connector groups its capabilities into modules. Each module represents one functional aspect of the instrument. For example, a balance connector might expose:

  • WeighingService — tare, zero, read weight
  • LockController — exclusive device locking to prevent concurrent access

Modules are the unit of organization within a connector's API. Expanding a module in the UI reveals its actions, grouped by type into Properties, Sensors, and Controls.

Built-in modules

Every connector — regardless of instrument — ships with these modules automatically:

ModulePurpose
Service metadataLists the connector's other modules so clients can introspect capabilities. Required for discovery.
LockControllerLets clients acquire exclusive access to the instrument
SimulationControllerToggle simulation mode — the connector responds with realistic fake values instead of talking to the hardware

Simulation mode is useful for developing workflows before the instrument is available, or for testing without consuming physical resources.

How connectors talk to instruments

Under the hood, connectors implement one of several integration protocols — SiLA 2 (the UniteLabs default, used by any connector built with the CDK), OPC-UA LADS (for vendors shipping LADS-compliant instruments), and adapters for LIMS / ELN systems. From a consumer's perspective this is invisible: every connector exposes the same Module / Action / Subscription model regardless of what it is speaking to the instrument. If you are building a connector, read SiLA in the CDK docs for the protocol-layer detail.

Lifecycle

Regardless of how a connector is managed, its lifecycle is the same:

  1. Start: the connector executable launches with a config.json file. It connects to the instrument and starts its local server.
  2. Running: the connector is reachable locally. If cloud is configured, it maintains an outbound relay to the UniteLabs cloud.
  3. Stop / Restart: the connector receives a shutdown signal, closes its instrument connection, and exits cleanly.

Via GroundControl: the GUI manages the process directly and shows status, logs, and restart controls in the interface. Connectors can be registered for auto-restart.

Via systemd (or another process supervisor): the connector runs as a system service that starts automatically on boot and restarts on failure. This is the typical setup for headless Linux servers and Raspberry Pi devices.

Configuration

Each connector has a configuration file that captures the instrument-specific settings — typically the instrument's hostname or IP address, port, and any authentication details. GroundControl generates a configuration form from the connector's own schema when you add a device, so you fill in fields specific to that instrument rather than editing a file manually.

For connectors run as standalone executables, configuration is stored in a config.json file alongside the binary. Run the connector once with the config create command to generate the default file, then edit it before starting the connector for real.