# Configure an NI device

> Learn how to connect and configure National Instruments modules.

The Synnax Driver supports every [National Instruments](https://www.ni.com/en-us.html) device that the [NI-DAQmx driver](https://www.ni.com/en-us/support/downloads/drivers/download.ni-daqmx.html) supports, including CompactDAQ, CompactRIO, and PXI systems. Chassis and their modules are discovered automatically and shown hierarchically in the Console.

## Prerequisites

Before you can start using your NI hardware with Synnax, you will need to ensure that you have the following:

1. A [Synnax Core](https://docs.synnaxlabs.com/reference/core/quick-start) running on your network.
2. A [Synnax Driver](https://docs.synnaxlabs.com/reference/driver/get-started) running on your network. This Driver must be connected to the Core and running on the same machine your NI hardware is connected to.
3. The [NI-DAQmx](https://www.ni.com/en/support/downloads/drivers/download.ni-daq-mx.html) and [System Configuration](https://www.ni.com/en/support/downloads/drivers/download.system-configuration.html) drivers installed on the machine running the Synnax Driver.
4. The [Synnax Console](https://docs.synnaxlabs.com/reference/console/get-started) installed on your local machine.

## Supported operating systems

| Platform           | Status          |
| ------------------ | --------------- |
| Windows            | ✓ Supported     |
| Linux              | ✓ Supported     |
| NI Linux Real-Time | ✓ Supported     |
| macOS              | ✗ Not Supported |
| Docker             | ✗ Not Supported |

## Configuration parameters reference

| Parameter    | Type   | Required | Description                                                 |
| ------------ | ------ | -------- | ----------------------------------------------------------- |
| `name`       | string | Yes      | Human-readable device name for identification in Console    |
| `rack`       | string | Yes      | Synnax Driver (rack) key where the device is connected      |
| `model`      | string | Yes      | NI device model (e.g., `cDAQ-9174`, `PXI-6259`, `USB-6008`) |
| `location`   | string | Yes      | Physical connection identifier (device name from NI MAX)    |
| `identifier` | string | Yes      | Channel name prefix for all channels on this device         |

## How-to

> Before you begin, connect to your device and reserve it using [NI MAX](https://www.ni.com/en/support/documentation/supplemental/21/what-is-ni-measurement---automation-explorer--ni-max--.html). The Driver must run on the same machine used to reserve the hardware.

**Console**

Synnax will automatically detect new NI modules and display a notification in the Console when a new device is connected. To start configuring the device, find the device in the devices toolbar, right click on the device and select “Configure”.

[](https://synnax.nyc3.cdn.digitaloceanspaces.com/docs/device-drivers/ni/configure-device/ni-configure-device-dark.mp4#t=0.001)

**Python**

```python
import synnax as sy
from synnax import ni

# Connect to Synnax
client = sy.Synnax()

# Get the embedded rack (local driver rack)
rack = client.racks.retrieve_embedded_rack()

# Configure device using the ni.Device class
device = ni.Device(
    identifier="dev_mod1",
    name="My NI Module",
    model="NI 9205",
    location="cDAQ1/dev_mod1",
    rack=rack.key,
)

# Create the device in Synnax
device = client.devices.create(device)

# Or retrieve by model
device = client.devices.retrieve(model="NI 9205")

# Or retrieve by name
device = client.devices.retrieve(name="My NI Module")

print(f"Device configured: {device.name} (key={device.key})")
```

**TypeScript**

```typescript
import { Synnax } from "@synnaxlabs/client";

// Connect to Synnax
const client = new Synnax();

// Get the embedded rack (local driver rack)
const [rack] = await client.racks.retrieve({ embedded: true });

// Configure device connection
const device = await client.devices.create({
  key: crypto.randomUUID(),
  rack: rack.key,
  name: "My NI Module",
  make: "NI",
  model: "NI 9205",
  location: "cDAQ1/dev_mod1",
  properties: {
    identifier: "dev_mod1", // Channel name prefix
  },
});

// Or retrieve by model
const [byModel] = await client.devices.retrieve({ models: ["NI 9205"] });

// Or retrieve by name
const [byName] = await client.devices.retrieve({ names: ["My NI Module"] });

console.log(`Device configured: ${device.name} (key=${device.key})`);
```
