홈 어시스턴트 스마트홈 구축기

목차

개발의 목적

기존에는 밖에서 PC작업할잃이 많아서 다원 Wi-Fi 스마트 플러그로 컴퓨터에 전원이 들어오면 켜지도록 설정하고 사용하고 있었다. PC외에는 원격으로 제어할 필요를 느끼지 못해 스마트 홈에 관심을 가지지않고 있었는데, 이번에 스마트싱스를 다원 플러그들을 연동해서 사용해보면서 스마트 홈에 대해 호기심이 들었었다. 예를 들어서 기존에는 스마트폰으로 플러그를 수동으로 조작해야했는데, 스마트싱스/홈킷을 통해 자동화를 하면 1. 지정된 시간에 PC를 끄고 켜거나 | 2. 대기전력을 감지해 원격조작을 대비해 미리 전원을 내려놓거나 | 3. 홈킷처럼 스마트폰 연동을 통해 위치를 사용한 자동화를 하거나 등 무궁무진하게 활용할 수 있다. 하지만 최근 KT 인터넷 사고홈브릿지의 스마트싱스 에드온 지원 종료를 보면 클라우드 기반은 의존적이어서 피하고 싶었고 마지막 대안인 홈 어시스턴트으로 넘어오게되었다. 이제 알리에서 구한 Tuya 지그비 플러그, CC2652 지그비 스틱, 시하스 다목적 센서그리고 다원몰에서 구한 다원 지그비 스위치를 이용해서 스마트홈을 완성해보자

결론

외부링크 & 대쉬보드 사진

레이 스마트홈 유튜브 강의

HomeKit_result_1
HomeKit_result_2
HomeKit_result_3

결과

원래 필자는 사물인터넷에 대해 필요성을 잘 느끼지못하고 있었다. 전등 불이나 모니터도 손으로 꺼도 불편하지않았고 그나마 가장 불편한게 침대에서 불을 끄고 싶은 정도였다. 하지만 이제 위치나 시간 기반의 자동화, 디바이스 상태에 따른 자동화를 사용해보면서 자동화의 편리성을 체감하고 있다. 예를 들어, 컴퓨터방의 전등을 키면 보조등과 모니터, PC가 같이 켜지게하거나 출근하거나 퇴근할때 자동으로 불을 끄고 켜놓거는 것처럼 사소하지만 작은 것들이 스마트 홈의 매력인 것 같다. 추가로 스마트홈을 2달간 해보면서 좋은 스마트 홈의 핵심은 많은 센서와 기계가 아닌, 서버와 지그비들사이의 안정적인 연결과 자동화 설계인 것 같다. 어제까지 잘 되던 자동화(ex.TV를 켜면 침대방 불 끄기)가 안되면 벌써부터 스마트 홈 전에는 없었던 귀찮음들이 생겨서 불을 끄러 가는 것도 어려웠었다.

구축에 사용할 도구들

Home Assistant

Home Assistant 홈 어시스턴트는 오픈소스 스마트 홈 서버이다. 라즈베리파이나 도커, VM등 여러 환경에서 작동할 수 있고 오픈소스의 장점으로 사용자 수가 많아 자동화 설계나 에러 상황에서 구할 수 있는 자료가 많다. 요즘은 프로그램뿐만 아니라 홈 어시스턴트를 구동하는 라즈베리파이 기반의 플랫폼도 판매하는 것 같다. 여기서 지그비 장치를 구동하고 관리하기 위해 Zigbee2MQTT, MosquittoBroker, 비주얼 스튜디오 스타일 편집기등의 에드온과 통합을 사용할 것이다.

Virtualbox

Virtualbox 버추얼박스는 오픈소스 가상화툴이다. 물론 윈도우 환경인 만큼 Hyper-V를 사용할 수 있겠지만 USB나 시리얼포트 공유가 되지않고 번거롭게 Socat을 사용해야해서 윈도우 환경에서도 버추얼박스를 사용한다.

NSSM

NSSM은 특정 프로그램을 윈도우 서비스로 만들어주는 툴이다. CMD에 Path를 등록해서 사용하고 CMD에서 실햄함에도 불구하고 서비스 수정이나 추가도 GUI로 쉽게 편집할 수 있다. 이제 윈도우에서도 linux chmod처럼 사용할 수 있다!

구축 과정

스마트홈 장비 선택

  1. 지그비 라우터 CC2652 -> 물론 한국에서도 CC2538을 구할 수 있지만, Zigbee2mqtt 사이트에서는 더 이상 2538을 지원하지 않는다고 한다. 그래서 알리에서 CC2652R 라우터를 구해서 사용한다.
  2. Tuya 스마트 플러그 -> 솔직히 디자인이나 국내 상품인 다원 지그비 플러그를 사용하고 싶었지만 최근에 가격이 더 오르기도 하고 다원 지그비 2개로 Tuya산 동일한 스펙, 리피터 플러그를 3개살 수 있다는 점이 가장 큰 선택이유였다. 어차피 다수를 사서 플러그 뿐만아니라 리퍼터로도 활용할 생각이었는지라 가격을 더 중심으로 생각했었다.
  3. 다원 지그비 스위치 -> Tuya 플러그와 비슷한 이유로 제미스마트나 헤이홈 같은 다른 2선식 스위치로 갈 생각이었지만 문제가 생기면 분리가 쉬운 플러그와 다르게 분리가 쉽지 않을 것 같았고 혹시라도 복스까지 갈아야하는 상황을 피하기위해 스위치 규격이 국내에 맞는 다원 스위치로 정하게 되었다.
  4. 시하스 다목적 센서 -> 초기에는 국내외 유튜브 리뷰를 둘러보면서 건전지도 구하기 쉬운 필립스 휴 모션을 갈 생각이었지만 국내에서 판매하는 곳이 없다는 것과 시하스 모션 센서가 가격은 비슷하면서 필립스 모션센서보다 인터벌도 4배이상 빨라서 구매하게되었다. 온습도 센서는 덤이다.

홈 어시스턴트 설치

HomeKit_setting_4
HomeKit_setting_5
HomeKit_setting_6

홈 어시스턴트 공식 설치 가이드-윈도우에서 나온 것처럼 하되, 필자는 최소사양으로 했을때 에드온 로딩이 꽤 길어져서 4코어/4기가 메모리 설정한 버츄얼박스에 진행을 했다. 반드시 네트워크 브릿지로 설정, UEFI 사용 설정, 가상머신 위치는 작업 폴더 안으로 설정하도록 하자!

지그비 관련 에드온 설치

레이 스마트홈 유튜브 강의

레이님의 스마트홈 유튜브 강의이다. 정말로 자세히 설명해주셔서, 필자가 레이님보다 더 잘 정리하는 건 쉽지않을 것 같다. 추가로 VM에서는 지그비 동글을 USB로 가져오기에, 주소가 시리얼이 아닌 /dev/ttyUSB0가 되어야한다. 반드시 홈 어시스턴트 하드웨어 정보에서 2번 확인하자!

지그비 장치 등록

레이 스마트홈 유튜브 강의

레이님이 강의해주신대로 하되, 반드시 장치의 페어링 방법을 알아놓도록하자. 대부분 동봉된 설명서에 나와있겠지만 시하스처럼 눈치것 찾아야하는 애들도 있으니 주의하자. Tuya는 전원 버튼을 길게 누르면되고, 다원 스위치는 가장 아래쪽 버튼을 길게 누르면되고, 시하스는 측면에 바늘 구멍을 길게 누르면 된다. 페어링 오픈하는 것도 꼭 주의하자! 또 자신이 페어링하기 원하는 장치가 Z2M에 등록되어있는지도 확인하자. 만약아니라면 직접 등록을 진행해보자. Z2M 새 장비 등록은 기회가 되면 다뤄보겠다.

홈킷과 연동 / 씬과 자동화 만들기

HomeKit_setting_7

홈킷과 연동은 어렵지않다. 홈킷 통합설정에서 홈킷으로 넘길 장치와 센서들을 선택하고 포함/제외할 장치를 선택하면 알아서 홈킷과 연동이된다. 다만 센서에 따라서 재실감지 등의 센서로 변하는 경유가 있으니 센서 상태나 타입을 잘 읽어보자.

HomeKit_setting_8

자동화는 스마트는 홈의 꽃이라고 할 수 있다. 물론 필자가 스마트폰 등을 통해 원격으로 가전들을 제어하는 것도 스마트홈의 주 기능 중 하나지만 자동화는 기존 스위치에서 스마트홈으로 넘어오길 잘했다고 느끼는 가장 큰 부분이다. 그 만큼 자동화는 사용자마다, 자동화에 대한 이해에 따라 활용할 수 있는 것이 다양하기에 처음에는 GUI를 통해 만들어보고 후에 YAML로 넘어가는 것을 추천한다. 또한 필자의 자동화도 최선은 아니며 하나의 접근이라고 생각하는 것이 맞다.

HomeKit_setting_8

씬은 자동화할 장치들의 상태를 저장해놓은 단축키라고 생각하면된다. 사진처럼 외출씬을 불러오면 씬을 통해 모든 장치의 전원을 끄는 것 상태를 불러오는 것이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
alias: 메인 컴퓨터 대기모드 전환
description: 메인 컴퓨터 대기모드 전환
trigger:
- type: power
platform: device
device_id: 45dc6e062d844c51b2207f62d7032d75
entity_id: sensor.tuya_plug_1_power
domain: sensor
below: 10
condition: []
action:
- type: turn_off
device_id: 45dc6e062d844c51b2207f62d7032d75
entity_id: switch.tuya_plug_1
domain: switch
mode: restart

이 자동화는 스마트 플러그에 연결된 컴퓨터가 특정 전력 아래일때 대기 전력을 차단하기위해 플러그를 끄는 자동화이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
alias: 컴퓨터방 불을 켜면 컴퓨터를 
description: '컴퓨터방 불을 켜면 컴퓨터를 켬 '
trigger:
- platform: device
type: turned_on
device_id: 9d83e677e60b47c5c559cce5c484768b
entity_id: switch.dawon_switch_2_top
domain: switch
condition: []
action:
- scene: scene.keompyuteo_sayong
mode: single
////
alias: 컴퓨터방 불을 끄면 보조등을
description: 컴퓨터방 불을 끄면 보조등을
trigger:
- platform: device
type: turned_off
device_id: 9d83e677e60b47c5c559cce5c484768b
entity_id: switch.dawon_switch_2_top
domain: switch
condition: []
action:
- type: turn_off
device_id: 9d83e677e60b47c5c559cce5c484768b
entity_id: switch.dawon_switch_2_bottom
domain: switch
mode: single

이 자동화는 컴퓨터방 메인등 스위치가 켜졌을때 컴퓨터와 모니터 그리고 보조등까지 다 같이 켜주는 자동화와 메인등을 끌때 보조등도 같이 꺼주는 자동화이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
alias: 집에 도착하면 불켜기
description: 집에 도착하면 불켜기
trigger:
- platform: device
device_id: 5e7cf283ff1e587f04a91589b667999a
domain: device_tracker
entity_id: device_tracker.iphone
type: enters
zone: zone.home
condition: []
action:
- scene: scene.jibe_docag_ilgwaljagdong
mode: single
////
alias: 집에서 나가면 불끄기
description: 집에서 나가면 불끄기
trigger:
- platform: device
device_id: 5e7cf283ff1e587f04a91589b667999a
domain: device_tracker
entity_id: device_tracker.iphone
type: leaves
zone: zone.home
condition: []
action:
- scene: scene.oeculjung_ilgwalsodeung
mode: single

이 자동화는 사용자 위치에 따라 외출 씬과 도착 씬을 켜주는 자동화이다. 이 자동화를 위해서는 홈 어시스턴트 앱을 설치해야하고, 홈 어시스턴트에 관련된 통합을 활성화해야한다! 자동화를 하기전에 로그북을 통해 위치나 핸드폰 상태변화가 홈 어시스턴트로 잘 전해지는지 반드시 확인해보자!

1
2
3
4
5
6
7
8
9
10
alias: 3시에 일괄소등하기
description: 3시에 일괄소등하기
trigger:
- platform: time
at: '03:00:00'
condition: []
action:
- scene: scene.oeculjung_ilgwalsodeung
mode: single

이 자동화는 3시에 서버를 제외한 장치들을 씬에 지정한 상태인 꺼짐 상태로 놓는 일괄소등 자동화이다.

자동 재시작 설정하기

이상적인 환경이라면 우리가 준비한 프로그램들이 오류없이 잘 작동하겠지만 슬프게도 이런저런 오류들이 오래동안 작동할 수록 누적되게된다. 다만 이런점이 홈 어시스트 뿐만이나라 IIS, FTP 등 전반적으로 모두 있기에 6시에 컴퓨터를 재부팅시키는 스케쥴을 준비할 것이다. EC2라면 RebootAPI는 호출해서 하면되지만 윈도우 기반 PC에서는 스케쥴러 등록를 통해 해보겠다. VM에서 홈 어시스턴트로 USB를 넘겨주는 방식이다보니 지연된 시작을 사용해도 지그비 코디네이터를 못 찾는 경유가 있다. 이러한 오류를 방지하기위해 홈 어시스턴트의 자동화를 활용해보자.

작업 스케줄러 활용

HomeKit_setting_10
HomeKit_setting_11
HomeKit_setting_12

위에 사진처럼 설정하되 시간은 각자 편한 시간으로 바꾸자. 반드시 유저 권한으로 실행시켜야한다

NSSM에 버츄얼박스 등록

HomeKit_setting_10
HomeKit_setting_11

NSSM은 윈도우 환경 변수 path에 nssm.exe를 등록해서 사용해도되고, 환경변수 등록 없이 nssm.exe의 경로로 이동해서 사용해도된다. 사진처럼 버츄얼박스 헤드리스를 호출하고 Argument 쪽에 -s ‘가상머신이름’을 붙여서 지연시작하면된다. 반드시 유저 권한으로 실행시켜야한다

홈 어시스턴트 활용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
alias: Z2M 자동 재시작
description: ''
trigger:
- platform: homeassistant
event: start
condition: []
action:
- delay:
hours: 0
minutes: 1
seconds: 0
milliseconds: 0
- service: hassio.addon_restart
data:
addon: 45df7312_zigbee2mqtt
mode: single

이렇게 자동화를 짜고 지연시간은 각자 컴퓨터 환경에 맞게 바꾸도록하자.

시행착오

  1. 홈 어시스턴트가 부팅될때 지그비 인식이 잘 안된다면 NSSM의 Delayed Start를 사용해보자. 추가로 홈어시스턴트가 부팅될때 Z2M도 재시작하게 자동화를 만들어 놓으면 지그비 인식 오류는 거의 없어진다.
  2. 홈킷이랑 연동을 할때 브릿지 연결을 끊고 새로 브릿지 연결을 해서 하는 방법도 있지만 통합환경에서 홈킷을 설정을 다시 해도 잘 연동된다.
  3. 아직 LG Webos TV랑 연동해주는 통합은 없는 것 같다. 필자는 홈브릿지를 써서 TV 관련된 자동화는 홈킷으로 사용하고 있다.
  4. 아이패드를 메인 홈킷으로 사용한다면 스크린이 꺼지지않게 하고 대기모드 설정을 꺼야한다! 물론 대기모드에 있어도 아무 장치나 제어를 해주면 다시 돌아오지만 그 딜레이가 커서 필자는 아이패드 미니 3를 전원에 연결해놓고 홈 패드로 활용하고 있다. 다만 애플 TV나 홈팟은 메인 홈킷에 등록만 하면 딜레이 문제 없이 사용할 수 있는 것 같다.
  5. 시하스 센서같은 end_device가 잘못된 라우터에 붙는다면 놓을 위치에 배치하고 홈 어시스턴트를 재부팅시켜보면 최적의 라우터에 붙게된다.

참고한 자료들과 같이보기 좋은 자료들

  1. https://www.youtube.com/watch?v=D1yvoc_K7CE&list=PLkxWnfx5J6RQ6z22zLwDh8l3QUTl64tuX&index=12
  2. https://www.youtube.com/watch?v=_b3osUyIHxQ&list=PLkxWnfx5J6RQ6z22zLwDh8l3QUTl64tuX&index=13
  3. https://cafe.naver.com/koreassistant
  4. https://cafe.naver.com/stsmarthome
  5. https://www.youtube.com/watch?v=P01ERVndpLY&list=PLkxWnfx5J6RQ6z22zLwDh8l3QUTl64tuX
  6. https://podo1017.tistory.com/265