기기의 밑바탕

기기는 SmartThings 플랫폼을 거쳐서 돌아가는 물리적 제품입니다.

기기의 프로필은 기기의 기능을 정의합니다. 이러한 성능은 기능(Capability)라고 불리는 개별 구성 요소로 분해됩니다. 그런 다음 기능 보여짐(Capability Presentations)으로 SmartThings 앱과 같은 SmartThings 클라이언트에서 기능(Capability)이 어떻게 보여지는지 고를 수 있습니다.

SmartThings는 기기의 불러오기를 빠르게 할 수 있도록 하는 표준적인 기능의 리스트인 만들어진 기능(Capabilities)을 제공합니다. 맞춤 기능(Capability)을 쓰면 유저가 자신만의 기능(Capability)을 만들고 기기의 고유한 기능을 정의할 수 있습니다.

기기 설정(Device Preferences)는 유저가 기기의 움직임을 커스텀할 수 있도록 하는 구성입니다. 기기를 SmartThings에 불러올 때 기기의 설정을 SmartThings에서 쓸 수 있게 해서 유저가 기기의 움직임을 커스텀할 수 있게 할 수 있습니다.

## 기기의 타입

SmartThings 플랫폼은 다음 기기 불러오기 타입을 지원합니다.

* 직접 연결 기기(Direct Connected Devices) - Wi-Fi로 SmartThings 플랫폼에 기기를 직접 잇습니다.
* 클라우드 연결 기기(Cloud Connected Devices) - SmartThings 밖의 클라우드의 기기를 SmartThings 플랫폼에 잇습니다
* 허브 연결 기기(Hub Connected Devices) - Zigbee, Z-Wave, LAN 을 쓰는 기기를 SmartThings 호환 허브(Works As a SmartThings Hub)에 잇습니다.
* 모바일 연결 기기(Mobile Connected Devices) - Samsung Galaxy에 연결된 블루투스 기기는 SmartThings 앱에서 움직일 수 있습니다. SmartThings Find를 쓰면 SmartThings 앱을 써서 SmartThings Find와 정보를 주고 받는 Samsung Galaxy와 서드파티 기기를 빠르고 쉽게 찾을 수 있습니다.

## 네임 스페이스

네임 스페이스는 개발자의 기능(Capability) 또는 기본 설정을 함께 그룹핑하는 데 쓰이는 식별 글자입니다. 맞춤 기능(custom Capability)나 기기 설정(Device Preference)을 만든다면, 네임 스페이스 아래에 만들어집니다. 개발자 계정에 대한 첫 번째 맞춤 기능(custom Capability) 또는 기본 설정을 만들 때 고유한 네임 스페이스가 만들어집니다. 삼성 계정 당 하나의 네임스페이스만 만들 수 있습니다. 네임 스페이스는 `angryofmyhomeminister6617`(내무부장관의분노6617)와 같이 쓸 수도 있습니다.

## 개발의 워크플로우

기기를 SmartThings 플랫폼에 불러오려면:

1. 쓰임새에 가장 적합한 기기 통합의 타입형을 고르세요. 각 기기의 타입 문서 섹션에서는 올바른 불러오기를 선택하는 데 도움이 되도록 불러오기에 대해 더 자세히 살펴볼 수 있습니다.
2. 기기를 불러오세요. GitHub 페이지의 SmartThings SDK에는 시작하는 데 도움이 되는 기기 불러오기의 예제 및 도구가 있습니다.
3. 기기를 테스트하세요.
4. SmartThings 앱에서 쓸 수 있도록 기기를 등록하세요.

## 기기를 Device API로 살피기

Devices API와 정보를 주고 받으며 SmartThings 플랫폼에 불러와진 기기에 다가갑니다. Devices API를 쓰면 SmartThings 플랫폼에 연결된 기기를 움직이고, 기기의 메타데이터에 다가가고, 기기의 상태를 알아볼 수 있습니다.

### Postman을 쓴 페이로드(payload)의 예

이 예에서는 Postman 앱을 써서 SmartThings 모션 센서에 대한 `GET` 요청을 `https://api.smartthings.com/v1/devices/<deviceID>`로 보냅니다.

1. Postman에서 새로운 `GET` 요청을 만드는 것으로 시작하세요.
2. 이 요청된 URL을 치세요: `https://api.smartthings.com/v1/devices/<deviceID>` 여기서 <deviceID>는 정보를 검색하려는 기기의 Device ID입니다.
3. Postman에서 `GET` 요청의 Authorization 탭에서 Authorization type으로 *Bearer Token*을 고르세요. *Token* 필드에 PAT를 치세요. Postman의 변수(variables)를 써서 PAT를 안전하게 유지하고, Postman에서 만들고 난 뒤로도 API 요청을 쉽게 승인할 수 있습니다.
4. Postman에서 *Send*를 클릭합니다. 다음은 `GET` 요청의 페이로드(payload)입니다.

```
{
    "deviceId": "<deviceID>",
    "name": "SmartThings Motion Sensor",
    "label": "Motion Sensor",
    "manufacturerName": "SmartThings",
    "presentationId": "SmartThings-smartthings-SmartSense_Motion_Sensor",
    "deviceManufacturerCode": "SmartThings",
    "locationId": "<locationID>",
    "roomId": "<roomID>",
    "deviceTypeId": "<deviceTypeId>",
    "deviceTypeName": "SmartSense Motion Sensor",
    "deviceNetworkType": "ZIGBEE",
    "components": [
        {
            "id": "main",
            "label": "Motion Sensor",
            "capabilities": [
                {
                    "id": "temperatureMeasurement",
                    "version": 1
                },
                {
                    "id": "battery",
                    "version": 1
                },
                {
                    "id": "motionSensor",
                    "version": 1
                },
                {
                    "id": "configuration",
                    "version": 1
                },
                {
                    "id": "refresh",
                    "version": 1
                },
                {
                    "id": "sensor",
                    "version": 1
                },
                {
                    "id": "healthCheck",
                    "version": 1
                },
                {
                    "id": "firmwareUpdate",
                    "version": 1
                }
            ],
            "categories": [
                {
                    "name": "MotionSensor",
                    "categoryType": "manufacturer"
                }
            ]
        }
    ],
    "parentDeviceId": "<deviceID>",
    "dth": {
        "completedSetup": true,
        "deviceNetworkType": "ZIGBEE",
        "deviceTypeId": "<deviceTypeId>",
        "deviceTypeName": "SmartSense Motion Sensor",
        "executingLocally": true,
        "hubId": "<hubID>",
        "networkSecurityLevel": "UNKNOWN"
    },
    "type": "DTH",
    "restrictionTier": 0
}
```

이 모션 센서는 Zigbee 네트워크에서 돌아가기 때문에 `parentDeviceId` 필드에서 이 모션 센서가 연결된 기기를 알 수 있습니다.(이 부모 device ID에 대한 `GET` 요청은 이 부모 device가 SmartThings v3 Hub임을 알려줍니다).

이 기기에 대해 나열된 구성요소의 리스트를 보세요. 이러한 구성 요소는 이 모션 센서와 연결된 기기의 프로필을 구성하는 데 도움이 됩니다. 다음은 기기의 프로필, 기능(Capability), 기능 보여짐(Capability Presentations)을 살펴보겠습니다.