DEV Community

Jungwook Park (Victor)
Jungwook Park (Victor)

Posted on

OK '구글 TV 켜'를 하기까지

Google home mini 를 저렴하게 구입하고, 집에서 사용하는 iot 기기를 연결하다보니 호환 불가능한 기기가 몇 가지 있었다.

  1. LG TV (75sj8570)
  2. 샤오미 선풍기 (2018 무선)

필요한 기능은 TV 켜기, 끄기 선풍기 켜기, 끄기

다행히 사용하는 NAS 가 docker 지원 모델이라 home-assistant 를 설치하니 home assistant 앱이나 api 를 통해서 제어가 가능했다. (샤오미 선풍기는 기본 지원 component 가 아니라서 여기 에 만들어진 component 를 이용했다.)

home assistant 와 google assistant 를 연결하는 방법은 두가지인데,
home assistant cloud (5$/month) 혹은 직접 google actions 를 이용하는 방법이 있다.

한달에 5$를 낼 생각은 처음부터 없었으므로, google actions 를 이용하려고 했는데 어째서인지 oauth 연결 부분에서 계속 에러가 발생하고, 에러 로그도 확인하기가 어려웠다. 분명히 Let's encrypt 로 https 접속이 가능하고 oauth 구성도 제대로 했는데도!?

이 시점에 IFTTT 를 이용하면 google assistant 음성을 trigger 로 webhook 을 동작시킬 수 있다는 것을 알게 되었다.

즉, 음성 명령 -> google assistant -> IFTTT -> webhook -> home assistant api -> iot 기기 제어가 가능하다.

다만, IFTTT는 한국어를 지원하지 않기 때문에 이 부분은 google assistant routine을 사용하기로!


설정은 다음과 같이

IFTTT 에서 Applet 을 생성하고 google assistant, Say a simple phrase 선택

Alt Text

Webhook 을 선택해서 이제 api 를 부르면 되겠지! 하는데

Alt Text


헤더에 인증 정보가 들어가는데 헤더를 보낼 수가 없다

하지만 body는 가능하니까, body 를 적당히 예쁘게 꾸며서 보내면 대상 url 로 api 를 보낼 수 있도록 하는 중계 서버가 있으면 된다.

중계 서버는 대충대충 아래와 같이 body 를 보내면 url, header, body 를 채우는 형태로 구성했다. 인증서 및 외부 접근이 가능해야 하는건 덤! 대신 이 중계 서버를 거치면 같은 NAS에 home assistant 와 중계 서버를 띄웠기 때문에, home assistant 서버는 굳이 외부 접근이 필요하지 않다. (하지만 home assistant를 외부에서 접근하려면 필요)

{
    "url": "target url",
    "headers": {
        "key": "value"
    },
    "body": {
        "key": "value"
    }
}

흐름은 다음과 같아진다

음성 명령 -> google assistant -> IFTTT -> webhook -> 중계 서버 -> home assistant api -> iot 기기 제어

따라서 티비 켜기 용 WOL IFTTT 설정은 아래와 같다. 중계 서버는 외부 접근 가능한 도메인이지만, 이제 home assistant 서버는 내부 도메인으로 접속하게 설정하였다.

Alt Text
Alt Text

payload 는 다음과 같다

{
    "url": "http://<home assistant endpoint>/api/services/media_player/turn_on",
    "headers": {
        "authorization": "Bearer <auth token>"
    },
    "body": {
        "entity_id": "media_player.lg_tv"
    }
}

이렇게 설정하면 google home / assistant 에서 run my script 1 을 말하게 되면 티비가 켜진다.

하지만 run my script 1 이라고 말하지고 싶지는 않으니 아래와 같이 google home routine 에 등록한다.

Alt Text


google home 이 지원하지 않는 tv 도 음성으로 켜기, 끄기 선풍기도 켜기, 끄기를 할 수 있게 되었다. 꼭 home assistant 를 이용하지 않고, google home / assistant 으로 필요한 작업의 trigger 로 IFTTT 를 사용할 수 있으므로 음성 명령을 통해 서버를 동작한다거나 등등의 작업도 수행할 수 있다.

중계 서버가 호출되지 않는다면 방화벽 미국에서의 접근이 허용되어 있는지 확인해야한다. IFTTT 서버가 내 경우는 미국에서 패킷을 보냈다.

Top comments (1)

Collapse
 
kingori profile image
Sewon Ann

그냥 리모콘을 쓰겠습니다? ㅋㅋㅋ