SmartThings Edge를 시작하세요

허브 연결 기기는 Matter, Zigbee, Z-Wave, LAN 프로토콜을 써서 SmartThings 호환 허브에 붙습니다. SmartThings 호환 허브를 쓰면 Matter, Zigbee, Z-Wave, LAN 기기를 SmartThings 플랫폼에 불러오게 되며 SmartThings 클라이언트에서 기기를 보고 움직이고 이러한 기기를 자동화 등에 불러올 수 있습니다.

SmartThings Edge Device Driver는 허브 연결 기기를 SmartThings 플랫폼에 불러옵니다. Edge Driver에는 허브에 불러 온 모든 허브 연결 기기가 허브에서 로컬로 움직이도록 하여 빠르고, 안정적이고, 더 많은 기능을 비롯한 여러 좋은 점이 있습니다.

## SmartThings Edge의 짜임새

SmartThings 플랫폼은 **기능(Capability)**으로 모든 기기를 보여줍니다. Edge Device Driver는 이러한 불러오는 법을 각 기기의 타입에 딱 맞는 네트워크 프로토콜로 바꾸고 기기를 움직일 수 있게 하고, 기기의 메시지를 이벤트로 바꿔줍니다.

예를 들어, 전구 드라이버가 `on` 이라는 기능 명령을 받으면 드라이버는 네트워크에 이어진 전구로 메시지를 써서 보냅니다. 드라이버가 네트워크를 타고 외부 수단에 의해 전구가 꺼졌다는 알림을 받으면 SmartThings 플랫폼에 전구가 꺼져 있음을 알려주려고 기능(Capability)과 속성(Attributes) 값을 보냅니다.

아래에서 SmartThings Edge의 짜임새로 쓸 수 있는 많은 기능 가운데 몇몇을 살펴 보겠습니다.

## SmartThings Edge Driver 란

SmartThings Edge Driver는 기기를 SmartThings 플랫폼에 불러오는 데에 있어야 하는 모든 것을 가져옵니다. 엣지 드라이버가 만들어지면 SmartThings CLI를 써서 패키지를 올리고, 허브에 깔고, 허브에서 지우고, SmartThings 플랫폼에서 없앨 수도 있습니다. 엣지 드라이버의 포맷과 지금 바로 깔 수 있는 예제 드라이버는 **드라이버의 요소와 구조**에서 디테일하게 볼 수 있습니다.

### Lua

드라이버에는 하나이거나 여러개의 묶음으로 이루어진 Lua 파일이 있습니다. 이 파일은 나머지 SmartThings 플랫폼의 명령에 답하고 기기를 움직이는 데 쓰이는 프로토콜에 맞춤 메시지를 만드는 일을 합니다. 또한 기기에서 메시지를 디코딩하고 SmartThings의 이벤트를 만들어내는 일도 합니다.

### 라이브러리

* 드라이버 라이브러리
Driver Library는 Edge Device Driver의 바탕이 되는 라이브러리입니다. 기기가 돌아가는 데에 있어야 하는 모든 표준적인 일들을 짜임새 있게 맟춰줍니다. 모든 드라이버가 써야 하는 두 가지 API는 드라이버 인스턴스화 호출과 run 호출입니다.

```
local example\_driver = Driver("example", {
  discovery = handle\_discovery,
  lifecycle\_handlers = {
    added = device\_added,
    init = device\_init,
    removed = device\_removed
  },
  capability\_handlers = {
    [capabilities.switch.ID] = {
      [capabilities.switch.commands.on.NAME] = command\_handlers.switch\_on,
      [capabilities.switch.commands.off.NAME] = command\_handlers.switch\_off,
    },
  }
})

example\_driver:run()

```

드라이버 라이브러리로는 타이머와 쓸모 있는 여러 기능을 만들어낼 수도 있습니다.

* 기기 라이브러리
기기 라이브러리는 기기 이벤트를 내보내고 데이터를 모아 두기 위한 API를 쓸 수 있게 합니다. `device.device_network_id`와 같은 기기의 속성도 쓸 수 있습니다.

* 기능(Capability) 라이브러리
SmartThing의 기능(Capability)은 기능 라이브러리를 써서 Edge Device Driver에서 찾게 됩니다. 기능(Capability)에 대한 내용은 **기능 레퍼런스**에서 찾아보세요.
명령(Commands)을 다루게 하려고 기능(Capability)의 명령(Commands)은 드라이버 초기화(초기 값 할당)에서 handlers에 쓰여집니다.
이벤트를 내보내려면 이벤트가 생긴 기기에서 `emit_event`를 호출해야합니다.

```
device:emit\_event(capabilities.switch.switch.on())

```

* Matter 라이브러리
이 라이브러리는 Matter 기기와의 통신을 다루는 데에 있어야 하는 API를 쓸 수 있게 합니다.

* Zigbee 라이브러리
이 라이브러리는 Zigbee 기기와의 통신을 다루는 데에 있어야 하는 API를 쓸 수 있게 합니다.

* Z-Wave 라이브러리
이 라이브러리는 Z-Wave 기기와의 통신을 다루는 데에 있어야 하는 API를 쓸 수 있게 합니다.

## 개발 툴

개발의 밑바탕이 되는 툴은 허브의 호스팅 라이브 로깅 서버인 SmartThings CLI와 SmartThings 콘솔입니다.

### SmartThings CLI

SmartThings CLI는 SmartThings Edge Plugin이 있어서 SmartThings Edge Device Driver들을 관리할 때 쓰는 커맨드 라인 인터페이스 생김새의 툴입니다. SmartThings CLI를 쓰면 패키지를 쉽게 빌드하고 SmartThings Cloud에 올려서 허브에 다운로드 받아 켤 수 있습니다. SmartThings Edge CLI의 모든 명령어 리스트를 보려면 SmartThings Edge CLI 플러그인의 **README**에서 볼 수 있습니다.

패키지를 빌드하고 올리려면:

```
smartthings edge:drivers:package [path_to_dir]
```

허브에 패키지를 깔려면:

```
smartthings edge:drivers:install [ID]
```

허브에서 패키지를 지우려면:

```
smartthings edge:drivers:uninstall [ID]
```

SmartThings에서 패키지를 지우려면:

```
smartthings edge:drivers:delete [ID]
```

SmartThings CLI를 쓰면 드라이버와 드라이버 라이브러리에서 만들어진 로그를 볼 수도 있습니다. 라이브 로깅은 허브에서 직접 호스팅합니다. 기기의 이벤트와 드라이버의 모든 로그와 print 문이 라이브 로그에 들어갑니다. `Edge:logcat` 명령을 써서 로그를 볼 수 있습니다.

```
$ smartthings edge:drivers:logcat --hub-address=10.0.0.37
┌───┬──────────────────────────────────────┬─────────────────────────────────────┐
│ #    │ Driver Id                            │ Name                               │
├───┼──────────────────────────────────────┼─────────────────────────────────────┤
│ 1    │ xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx │ Hello World                        │
└───┴──────────────────────────────────────┴─────────────────────────────────────┘
? Select a driver. 1
connecting... connected
2021-07-23T19:23:33.285429119+00:00 INFO Hello World  Starting Hello World Discovery
2021-07-23T19:23:33.291739786+00:00 INFO Hello World  Adding new Hello World device
```

### SmartThings Console

SmartThings Console은 기기의 메이커가 Works With SmartThings(WWST) 인증을 받으려고 허브 연결 장치의 SmartThings Edge Drivers를 보내는 곳입니다.

원래 있던 Edge Drivers와 기기의 프로필에서 내가 원하는 유저 경험과 같은 것을 찾을 수 없고, 새로운 기기의 프로필을 만들거나 서브 드라이버를 추가하거나 새 Edge Driver를 더하고 싶을 때는 하기 전에 **partner@smartthings.com**으로 문의하세요.

*새 기기의 프로필을 찾는 이유가 될 수 있는 것:*

* 원래 있던 기기의 프로필에는 내가 찾는 유저 경험에 필요한 기능(Capability) 묶음들이 없기 때문입니다.

*새로운 서브 드라이버를 찾는 이유가 될 수 있는 것:*

* 만든 기능(Capability)이 원래 있던 서브 드라이버와는 다르게 돌아가기 때문입니다.