본문 바로가기

IT/IoT

[HA] Home Assistant와 Amazon Echo 연동 (1)

반응형

Home Assistant는 아마존 에코(Amazon Echo)를 활용해서 디바이스 제어가 가능합니다.

아래 링크에서 전체적인 진행 방법을 확인할 수 있습니다.

https://www.home-assistant.io/components/alexa.smart_home/

해당 페이지의 내용을 살펴보겠습니다.

그전에 외부 접속을 위한 HTTPS 적용과 DDNS 설정은 아래 링크를 참조해서 미리 진행하면 됩니다.

2019/02/13 - [IT/NAS] - [자작NAS] 우분투 서버에 Docker로 Let's Encrypt 적용 (DuckDNS)

 

1. Amazon Alexa Skill 추가

먼저 Alexa Developer Console를 가입한 후 로그인합니다.

https://developer.amazon.com/

Alexa Developer Console

4개의 큰 카테고리 중 좌측 상단의 amazon alexa(Alexa)를 클릭하면 됩니다.

Skills

우측 상단의 Your Alexa Consoles 하위 메뉴의 Skills를 선택합니다.

Alexa Skills

파란색 Create Skill 버튼을 눌러서 새로운 스킬 생성을 진행합니다.

Create a new skill

Skill name에 적당한 이름을 입력하고 언어는 English (US)를 선택하면 됩니다.

하단의 선택 부분은 각각 Smart HomeProvision your own을 선택하고 Create Skill을 클릭합니다.

추가 설정 화면에서 Payload version을 v3 (preferred)로 설정한 상태로 창을 열어 둡니다.

이후에 Lambda 함수를 생성할 때 Your Skill ID 부분의 ID를 입력해야 합니다.

 

2. Lambda 호출을 위한 IAM Role 생성

다음으로 AWS(Amazon Web Services)에 IAM(Identity and Access Management) Role 생성이 필요합니다.

AWS는 접근 권한을 상세히 구분해서 사용할 수 있는데 불필요한 기능으로 발생하는 과금을 막을 수 있습니다.

AWS 계정이 없으면 아래 링크를 통해 가입하고 로그인하면 됩니다.

https://aws.amazon.com/

로그인 이후에 아래 링크로 접속해서 IAM를 검색하거나 좌측 상단의 Services에서 IAM를 선택합니다.

https://console.aws.amazon.com/

AWS Management Console

IAM 페이지에서 좌측의 Roles를 선택하고 Create role을 클릭합니다.

Create role

화면 상단의 AWS service(기본 선택) 하위의 Lambda를 선택하고 Next: Permissions를 클릭합니다.

Attach permissions policies

검색 부분에 AWSLambdaBasicExecutionRole를 입력한 후에 결과를 선택하고 Next: Tags를 클릭합니다.

Add tags

태그 설정은 스킵하고 Next: Review를 클릭합니다.

Review

AWSLambdaBasicExecutionRole-SmartHome 같은 적당한 이름을 넣고 Create role을 눌러서 완료합니다.

생성 완료

이후에 추가할 Lambda 함수를 위한 IAM Role이 생성되었습니다.

 

3. Lambda 함수 추가

Lambda 함수를 생성하기 위해 상단의 Services에서 Lambda를 선택합니다.

AWS Lambda

우측 상단의 지역이 N. Virgina으로 설정되어 있는데 원하는 언어에 맞춰 다음 중 하나를 선택합니다.

US East (N. Virginia)

English (US), English (CA)

EU (Ireland)

English (UK), English (IN), German (DE), Spanish (ES) or French (FR)

US West (Oregon)

Japanese and English (AU)

위 지역 중 하나를 선택하지 않으면 트리거에 Alexa Smart Home이 표시되지 않아 진행이 되지 않습니다.

상단의 화면에 보이는 Create a function 버튼을 클릭합니다.

생성 페이지

먼저 Author from scratch를 선택하고 이름(HomeAssistant)을 입력한 후 런타임은 Python 3.7을 선택합니다.

IAM role은 Using an existing role을 선택하고 직전에 만든 IAM을 선택한 후 Create function을 클릭합니다.

Detail

Designer 탭 안에 위치한 Add trigger를 클릭합니다.

Add trigger

Alexa Smart Home을 선택하고 Application ID는 Alexa Skill 페이지의 Your Skill ID 값을 입력합니다.

이전에 열어둔 Alexa Skill 페이지에서 값을 가져와서 넣고 Add를 누르면 됩니다.

코드 작성

코드 작성 부분에 아래 링크의 코드를 그대로 입력합니다.

https://gist.github.com/awarecan/630510a9742f5f8901b5ab284c25e912

화면의 Raw를 누르면 쉽게 복사가 가능합니다.

아래의 표에 있는 값들을 입력해야 하는데 BASE_URL만 입력하고 나머지는 입력하지 않아도 됩니다.

BASE_URL

외부에서 접속 가능한 Home Assistant 주소

NOT_VERIFY_SSL

True 설정 시 SSL 이슈 무시

DEBUG

True 설정 시 디버그 로그 작성

LONG_LIVED_ACCESS_TOKEN

테스트 용도로만 사용 (Home Assistant 계정 Profile 화면의 하단에서 Long-lived access token 생성 가능)

그 외에는 기본 설정으로 하고 스크롤을 올려서 우측 상단의 Save 버튼을 클릭합니다.

Default endpoint

마지막으로 Save 버튼 위의 ARN 값을 복사해서 Alexa Skill 페이지의 Default endpoint 부분에 입력합니다.

그리고 Alexa Skill 페이지의 Save 버튼을 누르면 설정이 완료됩니다.

 

4. Lambda 함수 테스트

먼저 Home Assistant에 Alexa를 추가하기 위해 configuration.yaml 파일에 다음 내용을 추가합니다.

alexa:
  smart_home:

파일을 수정한 후에 Home Assistant를 재시작합니다.

Lambda 함수를 테스트하기 위해 Save 버튼 옆의 Test를 클릭합니다.

테스트 생성

아래와 같은 내용을 입력하고 Create를 누릅니다.

{
  "directive": {
    "header": {
      "namespace": "Alexa.Discovery",
      "name": "Discover",
      "payloadVersion": "3",
      "messageId": "1bd5d003-31b9-476f-ad03-71d471922820"
    },
    "payload": {
      "scope": {
        "type": "BearerToken"
      }
    }
  }
}

토큰 값이 없는데 payload.scope 위치(type 다음 위치)에 "token"으로 추가할 수 있습니다.

혹은 LONG_LIVED_ACCESS_TOKEN 환경변수를 추가하고 값을 입력하면 됩니다.

이제 Test 버튼을 누르면 내가 보유한 스마트 기기들의 목록을 받을 수 있습니다.

 

5. 계정 연동

아마존 계정 연동을 해서 Alexa를 통해서 들어온 명령어를 처리할 수 있도록 해야 합니다.

먼저 Alexa Developer Console에서 생성한 스킬을 선택합니다.

좌측의 ACCOUNT LINKING을 누르면 계정 연동을 위한 설정이 가능합니다.

Account Linking

각각의 입력창에 다음과 같이 입력하면 됩니다.

Authorization URI

https://외부HA접속주소/auth/authorize

Access Token URI

https://외부HA접속주소/auth/token

Client ID

https://pitangui.amazon.com/

Client Secret

아무거나 입력

Client Authentication Scheme

반드시 Credentials in request body를 선택

Scope

smart_home

나머지 Domain List와 Default Access Token Expiration Time은 입력하지 않아도 됩니다.

입력을 완료했으면 우측 상단의 Save 버튼을 클릭합니다.

 

6. 앱에서 연동

이제 마지막 단계인 앱(혹은 웹앱)에서 계정을 연동하는 방법입니다.

Skills & Games

앱을 켜고 좌측 상단의 메뉴를 통해 Skills & Games를 선택합니다.

Your Skills

Your Skills 탭으로 이동해서 Dev를 선택하면 추가한 Home Assistant를 선택할 수 있습니다.

Enable to use

가운데 위치한 ENABLE TO USE 버튼을 클릭합니다.

로그인

Home Assistant 계정으로 로그인합니다.

연동 완료

연동이 완료되면 창을 닫습니다.

디바이스 검색

설정이 완료되면 디바이스를 검색하는데 HA의 기기들이 검색됩니다.

이제 Alexa를 통해 Turn on/off 디바이스 이름 등으로 제어가 가능해집니다.

디바이스 이름 대신 그룹 이름을 사용해서 한 번에 제어하는 것 역시 가능합니다.

이후 포스팅을 통해 HA에서 Alexa 설정을 좀 더 상세히 하는 방법에 대해서 알아보겠습니다.

반응형