---
name: "SmartDeviceModel.init"
mode: "api"
versionRequirements:
  - { name: "@ray-js/panel-sdk", version: "1.0.0" }
---

## SmartDeviceModel.init

> [VERSION] @ray-js/panel-sdk >= 1.0.0

### Description

Return the instance after asynchronously initializing the smart device

### Parameters

`Params`

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `deviceId` | `string` | No | Device ID; if omitted, automatically obtained from the miniapp launch parameters |

### Return Value

Type: `Promise<SmartDeviceModel>`

Smart device model instance after SmartDeviceModel initialization completes

### Examples

#### Basic initialization.

```typescript
import { SmartDeviceModel } from '@ray-js/panel-sdk';

const schema = [
  { code: 'switch_led', property: { type: 'bool' }, type: 'obj', mode: 'rw', id: 1, name: 'Switch' },
  { code: 'brightness', property: { type: 'value', min: 10, max: 1000, step: 1 }, type: 'obj', mode: 'rw', id: 2, name: 'Brightness' },
] as const;

type Schema = typeof schema;
const device = new SmartDeviceModel<Schema>();
await device.init();                    // Automatically get deviceId from mini program launch parameters
await device.init('your-device-id');    // Or specify deviceId
```

#### Configure abilities and dp-kit interceptors.

```typescript
import { SmartDeviceModel, SmartSupportAbility, createDpKit } from '@ray-js/panel-sdk';
import { protocols } from './devices/protocols';

const dpKit = createDpKit<Schema>({
  protocols,
  sendDpOption: { immediate: true, throttle: 300 },
});

const device = new SmartDeviceModel<Schema>({
  abilities: [new SmartSupportAbility()],
  interceptors: dpKit.interceptors,
});

await device.init();
dpKit.init(device);
```
