【GoogleHome】Google Home + IFTTT + IRKit로 에어컨을 조작한다

전 블로그 - 【GoogleHome】Google Home + IFTTT + IRKit로 에어컨을 조작한다

또 오랜만의 블로그가 되어 버렸습니다.

이번은, 타이틀대로입니다만 Google Home + IFTTT + IRKit 로 에어컨을 조작해 보고 싶습니다.

각 설명은 위의 링크를 따르십시오.

대략적인 흐름적으로는 다음과 같이 됩니다.
※Google Home 등의 초기 설정은 생략합니다.
  • IRKit의 deviceid, clientkey를 얻는다
  • clientkey를 기반으로 적외선 정보 얻기
  • deviceid, 적외선 정보에서 REST API 만들기
  • IFTTT this에 Google Assistant, that에 Webhooks를 지정해 REST API를 두드리도록 한다

  • 그럼 가자!

    IRKit의 deviceid, clientkey 얻기



    여기의 절차는 다음과 같습니다.
    1. instancename 얻기
    2. IRKit의 IPAddress 얻기
    3. clienttoken 취득
    4. deviceid, clientkey 취득

    1. instancename 얻기



    요청
    $ dns-sd -B _irkit._tcp
    

    Response
    Browsing for _irkit._tcp
    DATE: ---Sun 10 Dec 2017---
    13:14:45.638  ...STARTING...
    Timestamp     A/R Flags  if Domain  Service Type    Instance Name
    13:14:45.937  Add     2   4 local.  _irkit._tcp.    [INSTANCE_NAME]
    

    2. IRKit의 IPAddress 얻기


  • 에서 얻은 [INSTANCE_NAME]에서 IPAddress를 가져옵니다.

  • 요청
    $ dns-sd -G v4 [INSTANCE_NAME].local
    

    Response
    DATE: ---Sun 10 Dec 2017---
    13:15:37.795  ...STARTING...
    Timestamp     A/R Flags if Hostname                 Address                                      TTL
    13:15:37.796  Add     2  4 [INSTANCE_NAME].local.   [IP_ADDRESS]                                 10
    

    3. clienttoken 취득


  • 에서 얻은 [IP_ADDRESS]에서 clienttoken을 가져옵니다.

  • 요청
    $ curl -i "http://[IP_ADDRESS]/keys" -d '' -H "X-Requested-With: curl"
    

    Response
    HTTP/1.0 200 OK
    Access-Control-Allow-Origin: *
    Server: IRKit/2.1.0.0.g13da7b9
    Content-Type: text/plain
    
    {"clienttoken":"[CLIENT_TOKEN]"}
    

    4. deviceid, clientkey 취득


  • 에서 얻은 [CLIENT_TOKEN]에서 deviceid, clientkey를 가져옵니다.

  • 요청
    $ curl -i -d "clienttoken=[CLIENT_TOKEN]" "https://api.getirkit.com/1/keys"
    

    Response
    HTTP/1.1 200 OK
    Server: openresty
    Date: Sun, 10 Dec 2017 04:17:54 GMT
    Content-Type: application/json; charset=utf-8
    Content-Length: 94
    Connection: keep-alive
    Access-Control-Allow-Origin: *
    Access-Control-Allow-Headers: X-Requested-With
    X-Content-Type-Options: nosniff
    
    {"deviceid":"[DEVICE_ID]","clientkey":"[CLIENT_KEY]"}
    

    2. clientkey를 바탕으로 적외선 정보 획득



    먼저 4. 에서 얻은 [CLIENT_KEY]를 바탕으로 아래와 같은 요청을 합니다.

    요청
    $ curl -i "https://api.getirkit.com/1/messages?clientkey=[CLIENT_KEY]&clear=1"
    

    그러면 적외선 대기 상태가 됩니다.
    여기서 IRKit에 리모컨으로 명령을 내리면 아래와 같은 응답을 반환합니다.

    Response
    HTTP/1.1 200 OK
    Server: openresty
    Date: Sun, 10 Dec 2017 04:19:16 GMT
    Content-Type: application/json; charset=utf-8
    Content-Length: 1183
    Connection: keep-alive
    Access-Control-Allow-Origin: *
    Access-Control-Allow-Headers: X-Requested-With
    ETag: "-599963595"
    X-Content-Type-Options: nosniff
    
    {"message":[INFRARED_INFO],"hostname":"[INSTANCE_NAME]","deviceid":"[DEVICE_ID]"}
    

    3. deviceid, 적외선 정보에서 REST API 만들기



    이전 섹션에서 얻은 [INFRARED_INFO], [DEVICE_ID]에서 REST API를 만듭니다.

    REST
    https://api.getirkit.com/1/messages?clientkey=[CLIENT_KEY]&deviceid=[DEVICE_ID]&message=[INFRARED_INFO]
    

    필요한 경우 여기에서 curl에서 작동하는지 확인할 수 있습니다.

    요청
    curl -i 'https://api.getirkit.com/1/messages?clientkey=[CLIENT_KEY]&deviceid=[DEVICE_ID]&message=[INFRARED_INFO]'
    

    하지만 내 환경에서는
    curl: (3) [globbing] nested brace in column 163
    라고 나오고, 확인할 수 없었습니다.
    ※이 상태에서도 문제없이 성공합니다.

    4. IFTTT의 this에 Google Assistant, that에 Webhooks를 지정해 REST API를 두드리게 한다



    여기에서 IFTTT 설정이됩니다.

    this에는 Google Assistant를 아래 그림과 같이 설정합니다.
    google_home_ifttt_this

    that에는 Webhooks로서 아래 그림과 같이 설정합니다.
    google_home_ifttt_this

    조금만 요령이라고 할까 주의점이 있어서.
    this쪽으로 공조로 하고 있습니다만, 이것을 에어컨으로 하면 스마트 홈쪽의 설정이 씹어 버려, 「서모스탯의 설정이, 되어 있지 않습니다.」라고 분노해 버립니다.

    이것으로 에어컨의 조작을 목소리로 할 수 있게 되었습니다.

    OFF 쪽도 같은 순서로 등록하면, 외출처에서도 ON/OFF를 할 수 있게 되므로,
    · 30 분 후에 돌아 가기 때문에 에어 컨디셔너
    ·아, 에어컨 지우는 것을 잊었다! 집에 돌아가지 않고 지우고 싶다. . .
    같은 것을 할 수 있게 됩니다.

    누군가의 도움이 되면.

    좋은 웹페이지 즐겨찾기