기기 설정(Device Preferences)

기기 설정(Device Preference)은 유저가 그들이 가지고 있는 기기의 움직임을 커스텀할 수 있도록 하는 설정 값입니다. 기기 설정(Device Preference)은 유저에게 기기를 움직일 수 있는 방법을 마음대로 맞춤 세팅할 수 있게 하며, 이 세팅에는 프리셋 값을 미리 넣을 수도 있고, 넣지 않을 수도 있습니다. 유저는 SmartThings 앱에서 기기를 탭 하고 오버플로 메뉴( ⋮ )를 누르고 *세팅*을 눌러서 기기 설정(Device Preference)을 마음대로 맞출 수 있습니다.

기기 설정(Device Preference)은 다음 두 가지 방법 중 하나의 방법으로 할 수 있습니다.

1. 명시적으로 돌아가는 하나의 설정을 만듭니다. **맞춤 기능(Custom Capability)**과 비슷합니다.
2. 기기에다 임베디드식으로 **기기의 프로필**을 바로 넣습니다

## 명시적 기기 설정

명시적 기기 설정으로 유저가 여러 기기에서 만나볼 수 있는 하나의 기본 설정을 짤 수 있습니다.

명시적인 기기 설정에서는 언제나 작성자의 개인 **네임스페이스** 아래에 여러 네임스페이스가 달려 있습니다. 이 방법으로 짜여진 기기 설정은 버전이 따로 매겨지지 않으며, 기본 설정이 업데이트된다면 기기 설정을 불러올 수 있는 또다른 것인 기기의 프로필은 업데이트되지 않습니다. - 프로필은 언제나 추가될 때와 같은 버전의 기기 설정 값을 갖습니다.

기기를 쓸 때 있어야 할 명시적 기기 설정을 기기에 넣으려면 설정해야하는 프로필을 쓰는 쓰임새의 태그를 지정해야 합니다. 이것은 드라이버 패키지의 각 프로필 YAML 파일 내에서 돌아갑니다. 다음은 이러한 기기 설정에서 하나를 써서 만드는 간단한 프로필의 예입니다.

```
name: preference-profile
components:
- id: main
  capabilities:
    - id: temperatureMeasurement
      version: 1
preferences:
  - preferenceId: tempOffset
    explicit: true
```

SmartThings는 평범한 케이스에서 기기에 불러와질 수 있는 여러 표준 기기 설정을 개발했습니다. 오늘 바로 쓸 수 있는 표준 기기 설정의 묶음은 여기에서 찾을 수 있습니다.

## 임베디드 기기 설정

기기에서도 어떤 기기에만 있는 설정이 있도록 모델에 따라 기기 설정을 만드는 프로세스를 짧고 쉽게 하려면 기기 설정을 기기의 프로필에서 직접 짤 수 있습니다.

임베디드 기기 설정은 개개인의 기기의 프로필마다 다릅니다.

Embedded Device Preferences are unique to an individual Device Profile. They are defined directly in the Device Profile of the device that will be using the Preference. These Preferences and are not versioned, shareable, or update-able; the Preference exists only within the Device Profile. The Preference also includes additional information about the type and limits of the Preference.

Below is an example profile YAML file using an Embedded Preference:

```
name: preference-profile
components:
- id: main
  capabilities:
    - id: switch
      version: 1
    - id: battery
      version: 1
  categories:
  - name: RemoteController
preferences:
  - title: "IP Address"
    name: ipAddress
    description: "IP address of the Pi-Hole"
    required: true
    preferenceType: string
    definition:
      minLength: 7
      maxLength: 15
      stringType: text
      default: localhost
```

The `preferenceId` (and thus what you will use to reference the Preference from the driver) will be the name you define in the Preference definition.

## 기기 설정 값의 타입

A Device Preference's value can be one of five types:

* Boolean
* Number
* Integer
* String
* Enumeration

All Device Preferences must have at minimum three required fields:

* `title`: The Device Preference Title must conform to Custom Capability naming conventions.
* `preferenceType`: This field is a constant based on the type of Device Preference. Must be one of: `boolean`, `number`, `integer`, `string`, or `enumeration`
* `definition`: This block is required, but may be empty if no further customization is required.

Optional fields that apply to all Preference types include:

* `description`: Describes the Device Preference.
* `required`: A Boolean value that represents whether this Preference must be set. Default: `false`
* `definition.default`: The default value for this Preference if the user does not set the Preference.

### Boolean 설정

```
{
  "title": "string",
  "description": "string",
  "required": "boolean",
  "preferenceType": "boolean",
  "definition": {
    "default": "true" or "false"
  }
}
```

Boolean Preferences must have a `preferenceType` of `boolean`.

Boolean Preferences must have a `definition` block, but may be empty if `default` does not need to be set.

### Number 설정

```
{
  "title": "string",
  "description": "string",
  "required": "boolean",
  "preferenceType": "number",
  "definition": {
    "minimum": "a number",
    "maximum": "a number",
    "default": "a number"
  }
}
```

Number Preferences must have a `preferenceType` of `number`.

Number Preferences may optionally have a `minimum` and `maximum` number value, that define the lower and upper bound constraint this number may be set to.

### Integer 설정

```
{
  "title": "string",
  "description": "string",
  "required": "boolean",
  "preferenceType": "integer",
  "definition": {
    "minimum": "an integer",
    "maximum": "an integer",
    "default": "an integer"
  }
}
```

Integer Preferences must have a `preferenceType` of `integer`.

Replace `"integer"` with your desired integer value. Integer Preferences may optionally define a `minimum` and `maximum` number value, that define the lower and upper bound constraint this integer may be set to.