홈 어시스턴트/삼성 스마트 씽

[홈 어시스턴트] 삼성 스마트씽 연동 (최신, 오류 대처법 포함)

Eu4ng 2020. 4. 10. 00:31

이 글은 Home Assistant 0.112.4 버전을 기준으로 작성되었습니다. 

다른 블로그들에서 소개하는 base_url은 Home Assistant에서 공식적으로 삭제되었기에 사용 불가능합니다. 이 글에서는 use_x_forwarded_for과 trusted_proxies 항목을 이용합니다.

 


참고글

 

* 홈 어시스턴트 버전 확인 및 업그레이 방법

https://eu4ng.tistory.com/13

 

* 웹 훅이란 무엇인가

https://eu4ng.tistory.com/4

 

* Let's Encrypt ssl 인증서 받기

https://eu4ng.tistory.com/12


홈 어시스턴트와 삼성 스마트씽 연동을 위한 방법은 다음과 같다.

 

(1) 홈 어시스턴트에서 제공하는 NABU CASA 클라우드를 이용한 연동

- 홈 어시스턴트 - NABU CASA - SmartThings Cloud 연동

- 삼성 스마트씽 계정에 접근하기 위한 개인 접근 토큰이 필요하다

- 홈 어시스턴트 클라우드는 non-expired subscription으로 설정 및 로그인 되어 있어야한다.

- 유료이다

(2) 직접 연동 (웹 훅)

- 홈 어시스턴트 - SmartThings Cloud 연동

- 삼성 스마트씽 계정에 접근하기 위한 개인 접근 토큰이 필요하다

- 삼성 스마트씽 클라우드에서 접근을 하기 위한 SSL 인증된 도메인이 필요하다. 자체 서명 SSL은 인정되지 않는다.

 

  이 글에서는 홈 어시스턴트와 삼성 스마트씽을 직접 연동시키는 방법에 대해 소개하고자 합니다.

ssl 인증서는 이미 발급받은 것으로 가정하고 설명하도록 하겠습니다. 혹시 받는 법을 모르시는 분은 참고글을 통해 확인해주세요.

STEP 1. configuration.yaml 편집

더보기

(1) 삼성 스마트씽 클라우드에서 홈 어시스턴트에 접속하기 위한 외부 URL 정의

- 외부 URL은 해당 도메인 주소와 포트 번호 8123번으로 기본값이 설정되어있습니다. 하지만 역방향 프록시를 이용하여 포트 번호를 443번으로 바꿔줄 것이기 때문에 외부 URL 역시 443번으로 설정해줍니다.

 

위와 같이 작성하면 https의 기본 포트인 443번으로 설정된다.

2. 역방향 프록시 설정

- base_url이 사라지면서 역방향 프록시를 이용하여 설정해주도록 바뀌었다. DSM에서 역방향 프록시 설정을 해주어야하지만 configuration.yaml에서도 설정을 해주어야하므로 미리 작성하도록 하겠습니다.

시놀로지 역방향 프록시 서버의 접근을 허용해주는 설정이다. 

* 만약 역방향 프록시가 다른 나스에서 작동한다면 127.0.0.1 대신 해당 나스의 ip 주소를 입력해주면 됩니다.

 

위 그림과 같이 삼성 스마트씽 클라우드는 HA에 직접 연결하는 것이 아니라 나스의 역방향 Proxy 서버를 거치기 때문에 HA 입장에서는 삼성 스마트 씽 클라우드가 아니라 역방향 Proxy 서버가 자신에게 접근하려고 하는 것으로 보인다. 따라서 위 설정을 하지 않는다면 홈어시스턴트 로그인 시도 후 오류가 뜨면서 docker 컨테이너 로그에는 127.0.0.1 ip의 권한 때문에 차단되었다는 메시지가 뜬다. 그림은 제가 이해한 바를 나타낸 것으로 정확하지 않을 수 있습니다  

 

 

STEP 2. 역방향 프록시 설정

더보기

1. DSM -> 제어판 -> 응용 프로그램 포털 -> 역방향 프록시 탭 -> 생성 클릭

2. 역방향 프록시 규칙 설정

3. 사용자 지정 머리글 생성

- 사용자 지정 머리글 탭이 보이지 않는다면 DSM 버전이 낮기 때문이므로 오류 발생시 대처법 참조

생성 -> WebSocket 클릭

 

위와 같이 생성되었다면 완료된 것이다

 

STEP 3. 홈어시스턴트에서 삼성 스마트 씽 추가

더보기

1. 홈어시스턴트 접속 후 통합 구성요소에서 삼성 스마트 씽 추가

+ 버튼 클릭 후 SmartThings를 검색하여 추가해준다

2. 외부 접속 URL 확인

- 외부 접속이 잘 되는지 확인하는 방법은 아래의 웹 훅 주소를 우 클릭 후 새 탭에서 링크 열기를 눌러 에러가 나타나는지 확인하면 된다. 

도메인 주소와 포트 번호가 위에서 설정한 것과 동일한지 확인한다. 만약 틀리다면 STEP 1의 외부 URL 정의가 잘 되어있는지 다시 확인해보자. 

3. 삼성 스마트씽 토큰 입력하기

- 미리 발급해둔 토큰이 있다면 그대로 입력하면 되고, 만약 없다면 "개인 엑세스 토큰"을 클릭하여 삼성 스마트씽 홈페이지에서 토큰을 새로 발급받는다. 웬만하면 권한을 전부 주는 것이 편할 것이다. 또한, 토큰은 한번 생성 후 재확인이 불가능하므로 메모장 같은 곳에 저장해두자. 만약 분실했다면 토큰 삭제 후 재발급을 받으면 된다. 

- 만약 웹훅에 접속할 수 없다는 에러가 뜬다면 80, 443번 포트포워딩이 잘 되어있는지 확인해보자.

4. 삼성 스마트 씽 설정

- 위치 선택 후 확인을 누르면 자동으로 삼성 스마트씽 홈페이지로 접속된다. 로그인 후 홈 어시스턴트를 허용해주면 된다.

삼성 스마트 씽에서 설정되어 있는 위치(서울 집, 인천 집 등)중 하나를 선택
삼성 스마트씽 로그인
원하는 이름 작성 후 DONE 클릭
홈 어시스턴트 허용을 클릭. 클릭하고 나면 로딩 후 빈 화면이 나타나는데 기다릴 필요 없이 홈 어시스턴트 화면으로 돌아가면 된다
정상적으로 삼성 스마트씽과 연동되었다

 

오류 발생 시 대처법

- 역방향 프록시 설정 후 로그인 불가 (Unable to connect to Home Assistant)

- 특히 시놀로지 6.2 이하 버전은 사용자 지정 헤더 탭이 존재하지 않아 STEP 2와 더불어 다음 과정이 필요합니다.

해당 오류 메시지

더보기

시놀로지 역방향 프록시 설정에 웹소켓이 빠져서 발생하는 현상이다

STEP 2에 따라 웹소켓을 생성해주거나 사용자 지정 머리글 탭이 보이지 않는 경우 수동으로 넣어주면 된다.

 

1. putty 같은 프로그램으로 나스에 SSH로 접속

2. 로그인 (시놀로지 DSM 아이디, 비밀번호와 동일)

putty 로그인 화면

3. 관리자 권한으로 로그인

- sudo su 를 입력한 후 비밀번호 입력

* 파일을 변경하기 위해서는 관리자 권한이 필요하다. 

* 참고로 비밀번호를 입력해도 콘솔창에는 아무런 표시가 나타나지 않는다. 잘 입력되고 있는 것이므로 그냥 비밀번호를 치고 엔터를 눌러주면 된다.

ash-4.3#이 뜨면 성공

4. 다음 명령어 입력

- vi /usr/syno/share/nginx/Portal.mustache 

5. 웹 소켓 추가

화살표 키를 이용해 Location 섹션을 찾은 후 다음 3줄을 추가한다. 열맞춤은 스페이스바 대신 탭으로 조정할 것.

입력할 때는 INS 버튼을 누른 뒤 작성해주면 된다.

- proxy_set_header Upgrade $http_upgrade;

- proxy_set_header Conncection "upgrade";

- proxy_read_timeout 86400;

작성을 완료했으면 컨트롤 +C를 눌러 INSERT 모드를 나간 뒤, ZZ 를 입력하여 편집기를 종료한다

6. nginx 재시작

- 다음 명령어를 입력하여 nginx 서버를 재시작하여 변경사항을 적용해준다.

- synoservice fg --restart nginx

* DSM 업데이트 시 파일이 갱신되면서 초기화될 수 있으므로 같은 문제가 발생하면 같은 방법으로 다시 확인하면 된다.