Skip to content

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 _ allowed
cannot 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.position is always 0.
  • connecting_device and measurement_device positions form a continuous sequence starting at 1 — no gaps, no duplicates.
  • end_device.position is 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 0x380x3f 4-to-1 multiplexer. Works with HAIGen1 and HAIGen2.
adg729_mux_4to1 0x440x47 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 0x200x27.

Validation Rules

Beyond the per-field constraints listed above, the interpreter enforces several cross-field rules when a profile is uploaded:

  • All device id values must be unique.
  • All wired-connection id values must be unique.
  • Every device_id referenced from hais, wired_connections, or jumpers must exist in devices.
  • Each device may be mapped to a relay on at most one HAI.
  • Every mux_channel_id referenced from wired_connections must exist in multiplexers.
  • Every relay_card_i2c_address referenced from jumpers must exist in relay_cards.
  • The adg729_mux_4to1 multiplexer type cannot be combined with a HAIGen2 HAI.
  • No string value in the profile may start with whitespace.
  • devices must 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"
    }
  ]
}