Assembly Profile
The Assembly Profile is a JSON file that describes an Assembly — its hardware devices, bus connections, and power control setup. The data model is updated consistently to incorporate new features and improvements.
Structure
| Field | Required | Description |
|---|---|---|
assembly_ref |
Yes | Globally unique identifier. Pattern: ASSEMBLY-1234.Letters, digits, - and _ allowedcannot start or end with - or _. |
assembly_name |
No | Human-readable name shown in the vHaaS UI. Max 30 characters. |
info |
No | Free-text description of the assembly. |
datamodel_version |
Yes | Schema version identifier. Use "5.0.0". |
devices |
Yes | All physical hardware devices in the assembly. Must include at least one board and one debugger. |
hais |
No | Hardware Automation Interfaces for powering devices on and off. |
wired_connections |
No | Bus connections between devices (CAN, ETH, DEBUG, …). |
multiplexers |
No | Switchable routing for setup variants; referenced by wired_connections. |
jumpers |
No | Eval-board jumper toggles. Requires relay_cards. |
relay_cards |
No | I2C relay cards used by jumpers. |
Deprecated fields
Older profiles may contain fields that have been superseded (name, derivative, hsr, meta_data, eqc_derivative, and the HAI type controllino_maxi_automation). Do not copy these into new profiles — they will be removed in a future version.
Devices
The devices list describes every piece of hardware in the assembly. A valid assembly must contain at least one board and one debugger.
Device fields
| Field | Required | Description |
|---|---|---|
id |
Yes | Unique integer ID within the assembly (0–1000). |
type |
Yes | Device category. See Device types. |
supplier |
No | Manufacturer, e.g. "Vector". |
family |
No | Product family, e.g. "VN1670". |
variant |
No | Variant within the family, e.g. "Mini". |
revision |
No | Hardware revision, e.g. "B3-Sample". |
serial_number |
No | Serial number. |
inventory_number |
No | Inventory / asset number. |
supply_in_v |
No | Nominal supply voltage in volts. |
connection |
No | How the device is connected to the VM. See Connection types. |
ip |
Conditional | IP address. Required when connection is WuT_gigabit or WuT_megabit. |
mac |
No | MAC address (format XX:XX:XX:XX:XX:XX). |
vm_uplink |
No | Whether the device has a 10G uplink to the VM. |
parent_device_id |
No | Parent device ID for nested devices (0–1000). |
status_port_pin |
No | Pin used for alive-status checks. |
info |
No | Free-text description. |
metadata |
No | User-defined key/value pairs. |
Device types
| Type | Description |
|---|---|
board |
Microcontroller or microprocessor eval board |
debugger |
Hardware debugger (e.g. Lauterbach) |
vn_interface |
Vector VN-series interface |
vh_interface |
Vector VH-series interface |
vx_interface |
Vector VX-series interface |
transceiver |
Standalone transceiver |
vt_system |
Vector VT HIL system |
vt_rack |
VT rack |
vt_card |
VT card |
vio_rack |
VIO rack |
vio_card |
VIO card |
mux |
Multiplexer device |
switch |
Network switch |
logic_analyzer |
Logic analyzer (e.g. Saleae) |
oscilloscope |
Oscilloscope |
pin |
Pin box |
usb_server |
USB device server |
usb_hub |
USB hub |
usb_cutter |
USB cutter |
wifi_adapter |
Wi-Fi adapter |
workstation |
Workstation |
webcam |
Webcam |
power_supply |
Power supply |
relay |
Relay device |
other |
Anything not covered above |
Connection types
| Value | Description |
|---|---|
usb |
Direct USB |
eth |
Direct Ethernet |
WuT_gigabit |
WuT USB-to-Ethernet (1 Gbit). Requires ip. |
WuT_megabit |
WuT USB-to-Ethernet (100 Mbit). Requires ip. |
Silex_DS-600 |
Silex USB device server |
SEH_Pro |
SEH USB device server |
SEH_ProMax |
SEH USB device server (Pro Max) |
sub_device |
Child of another device |
PCIe |
PCIe (mainly for VT-Systems) |
other |
Other connection type |
Hardware Automation Interfaces (HAI)
HAIs are network-connected relay boards that control the power state of devices. Each HAI has an IP address and maps its physical relays to device IDs. See HAI.Gen2 for the hardware details, channels, and LED states.
HAI fields
| Field | Required | Description |
|---|---|---|
type |
Yes | HAI hardware type. See HAI types. |
ip |
Yes | IP address of the HAI. |
map_relay_to_device |
Yes | List of {relay_id, device_id} mappings. |
mac |
No | MAC address. |
dns |
No | DNS name (used by the HAI mock service). |
inventory_number |
No | Inventory / asset number. |
monitoring |
No | Enable power monitoring via the HAI. Default false. |
map_digital_in_to_device |
No | Map digital-in pin name → device ID for alive-status detection. |
metadata |
No | User-defined key/value pairs. |
HAI types
| Type | Relay indices | Notes |
|---|---|---|
HAIGen1 |
0 – 9 | Standard Controllino-based board. Supports multiplexers and I2C. |
HAIGen2 |
0 – 9 | Newer HAI hardware. Does not support adg729_mux_4to1. |
brennenstuhl_v3 |
0 – 3 | Smart power strip. Pairs 0+1 and 2+3 are physically coupled. |
allnet_4176 |
0 – 5 | Allnet 6-outlet smart strip. |
anel_powerstrip |
1 – 8 | ANEL power strip. |
anel_ip_powerstrip |
0 – 7 | ANEL IP power strip. |
Wired Connections
wired_connections describes the bus topology between devices — for example, a CAN FD connection from an MCU board through a VN interface. Each connection specifies which devices are involved and what communication protocol is used.
Wired connection fields
| Field | Required | Description |
|---|---|---|
id |
Yes | Unique integer ID within wired_connections. |
type |
Yes | Communication protocols on this connection. See Communication types. |
main_device |
Yes | Originating device (always position 0). |
end_device |
No | Terminating device (highest position). |
connecting_device |
No | Intermediate devices between main and end. |
measurement_device |
No | Tap/measurement points (e.g. logic analyzer). |
mux_channel_ids |
No | Multiplexer channel IDs this connection is routed through. |
Each device in the chain includes device_id, position, optional port_pins, channel, transceiver, and info fields.
Position rules:
main_device.positionis always0.connecting_deviceandmeasurement_devicepositions form a continuous sequence starting at1— no gaps, no duplicates.end_device.positionis one higher than the last intermediate device position.
Communication types
Grouped for readability:
| Group | Values |
|---|---|
| CAN | CAN, CAN_FD, CAN_XL |
| LIN | LIN |
| Ethernet | 10BASE_T, 10BASE_T1S, 10BASE_Te, 100BASE_T1, 100BASE_T, 100BASE_TX, 1000BASE_T1, 1000BASE_T, 2.5GBASE_T, MultiGBASE_T1 |
| Serial | UART, KLINE, J1708, SERIAL |
| Debug / JTAG | DEBUG, JTAG, RESET |
| Bus | SPI, I2C, HyperBus, FlexRay |
| Other | USB, GNSS, SYNC, W11P, SENT, DAIO, I/O, PLC, OTHER |
Multiplexers
Multiplexers enable switchable routing, for example to select between different transceivers on a shared bus. Wired connections reference multiplexer channels by their id. See Channel Multiplexing for the GUI and configuration details.
Multiplexer fields
| Field | Required | Description |
|---|---|---|
mux_type |
Yes | Multiplexer hardware type. See below. |
mux_address |
Yes | I2C hex address, e.g. "0x3f". |
mux_channels |
Yes | List of {id, channel} entries. channel is one of A, B, C, D. |
Multiplexer types
| Type | I2C address range | Notes |
|---|---|---|
mux_v1_4to1 |
0x38–0x3f |
4-to-1 multiplexer. Works with HAIGen1 and HAIGen2. |
adg729_mux_4to1 |
0x44–0x47 |
ADG729 4-to-1 multiplexer. Works only with HAIGen1. |
Jumpers and Relay Cards
Jumpers represent physical jumper toggles on an eval board — such as switching between reset modes or connecting an extension. Each jumper is controlled through a channel on an I2C relay_card. When jumpers are defined, at least one relay card must be listed as well. See Relay Card & Jumpers for hardware capabilities and API endpoints.
Jumper fields
| Field | Required | Description |
|---|---|---|
id |
Yes | Unique integer ID within jumpers. |
name |
Yes | Jumper label as silkscreened on the board (e.g. "F03"). |
info |
No | What the jumper does. |
default_state |
Yes | State when not activated (e.g. "OFF", "open", "12V"). |
active_state |
Yes | State when activated (e.g. "ON", "connected", "24V"). |
device_id |
Yes | Device this jumper belongs to. |
relay_card_i2c_address |
Yes | I2C address of the controlling relay card. |
relay_card_channel |
Yes | Relay channel on the card. One of A, B, C, D, E, F, G. |
Each (relay_card_i2c_address, relay_card_channel) combination can be used by at most one jumper.
Relay card fields
| Field | Required | Description |
|---|---|---|
type |
Yes | Relay card model. Currently only relay_card_v1_1_7ch (7 channels A–G). |
i2c_address |
Yes | I2C address, typically in 0x20–0x27. |
Validation Rules
Beyond the per-field constraints listed above, the interpreter enforces several cross-field rules when a profile is uploaded:
- All device
idvalues must be unique. - All wired-connection
idvalues must be unique. - Every
device_idreferenced fromhais,wired_connections, orjumpersmust exist indevices. - Each device may be mapped to a relay on at most one HAI.
- Every
mux_channel_idreferenced fromwired_connectionsmust exist inmultiplexers. - Every
relay_card_i2c_addressreferenced fromjumpersmust exist inrelay_cards. - The
adg729_mux_4to1multiplexer type cannot be combined with aHAIGen2HAI. - No string value in the profile may start with whitespace.
devicesmust contain between 1 and 100 entries.
Metadata
Devices and HAIs both accept an optional metadata field — a free-form dictionary of key/value strings. Useful for linking to JIRA tickets, storing serial numbers with context, or attaching any other information that isn't part of the schema.
Examples
Minimal profile
One board, one debugger, and a HAIGen1 that controls both:
Minimal profile
{
"assembly_ref": "ASSEMBLY-1",
"assembly_name": "My Board Setup",
"datamodel_version": "5.0.0",
"hais": [
{
"type": "HAIGen1",
"ip": "1.2.3.4",
"map_relay_to_device": [
{ "relay_id": 0, "device_id": 1 },
{ "relay_id": 1, "device_id": 2 }
]
}
],
"devices": [
{
"type": "board",
"family": "Traveo2",
"variant": "CYT2B65B12",
"id": 1
},
{
"type": "debugger",
"family": "PowerDebugPRO",
"supplier": "Lauterbach",
"connection": "eth",
"ip": "5.6.7.8",
"id": 2
}
]
}
Full profile
A larger example with multiple HAIs, wired connections across CAN/LIN/DEBUG, a multiplexer, and jumpers on a relay card:
Full profile
{
"assembly_ref": "ASSEMBLY-2",
"assembly_name": "Big-Assembly",
"datamodel_version": "5.0.0",
"hais": [
{
"type": "HAIGen1",
"ip": "1.2.3.4",
"inventory_number": "9063",
"monitoring": true,
"map_relay_to_device": [
{ "relay_id": 0, "device_id": 1 }
],
"map_digital_in_to_device": { "0": 2 },
"metadata": { "JIRA": "https://jira.example.com/browse/HSR-9063" }
},
{
"type": "allnet_4176",
"ip": "1.2.3.5",
"inventory_number": "9064",
"map_relay_to_device": [
{ "relay_id": 0, "device_id": 3 },
{ "relay_id": 5, "device_id": 4 }
]
}
],
"devices": [
{
"type": "debugger",
"family": "PowerDebugPRO",
"supplier": "Lauterbach",
"connection": "eth",
"ip": "5.6.7.8",
"inventory_number": "9388",
"id": 1
},
{
"type": "board",
"family": "Traveo2",
"variant": "CYT2B65B12",
"connection": "usb",
"inventory_number": "7973",
"status_port_pin": "PA1",
"id": 2
},
{
"type": "mux",
"family": "lin_multiplexer",
"id": 3
},
{
"type": "vn_interface",
"family": "VN1670",
"connection": "Silex_DS-600",
"serial_number": "6467",
"id": 4
}
],
"wired_connections": [
{
"id": 0,
"type": ["CAN", "CAN_FD"],
"mux_channel_ids": [0],
"main_device": {
"device_id": 2,
"position": 0,
"port_pins": ["PA0", "PA1"]
},
"end_device": {
"device_id": 3,
"position": 1
}
},
{
"id": 1,
"type": ["DEBUG"],
"main_device": {
"device_id": 1,
"position": 0,
"port_pins": ["JTAG"]
},
"end_device": {
"device_id": 2,
"position": 1
}
}
],
"multiplexers": [
{
"mux_type": "mux_v1_4to1",
"mux_address": "0x3f",
"mux_channels": [
{ "channel": "A", "id": 0 },
{ "channel": "B", "id": 1 }
]
}
],
"jumpers": [
{
"id": 0,
"name": "F03",
"info": "RESET-Mode",
"default_state": "OFF",
"active_state": "ON",
"device_id": 2,
"relay_card_i2c_address": "0x27",
"relay_card_channel": "A"
}
],
"relay_cards": [
{
"type": "relay_card_v1_1_7ch",
"i2c_address": "0x27"
}
]
}