라즈베리 파이와 아이폰 시리로 홈 오토메이션 - 2

Homebridge 설정하기

앞서 라즈베리 파이 제로 W(이하 RPi Z W)를 설정하는 법을 살펴보았다. 이 글에서는 준비된 시스템 상에 Homebridge를 설치하고 이를 아이폰의 시리와 연동해 집에 있는 IoT 기기를 어떻게 제어하는지 알아보겠다.

Homebridge 설치

Homebridge는 Node.js 기반 애플리케이션이므로 Node.js를 먼저 설치해주어야 한다. RPi Z W의 패키지 매니저에서 제공하는 Node.js는 업데이트가 느리므로 직접 설치하도록 하자. 여기에서 원하는 Node.js 버전을 설치할 수 있는데 최신 버전보다는 LTS(Long Term Support) 버전 사용을 권장한다. SSH로 RPi Z W에 접속한 후 다음 명령어를 실행하여 Node.js를 설치하자.

wget -O - https://raw.githubusercontent.com/sdesalas/node-pi-zero/master/install-node-v.lts.sh | bash

그 다음에는 필요한 라이브러리를 설치해주어야 한다.

$ sudo apt-get install libavahi-compat-libdnssd-dev

이 라이브러리를 설치해주지 않으면 Homebridge 설치 도중에 다음과 같은 에러를 만나게 된다.

fatal error: dns_sd.h: No such file or directory

이제 Homebridge를 설치한다. 다음과 같이 -g 옵션을 주어 전역 패키지로 설치하면 된다.

$ npm i -g homebridge

느린 시스템에서 컴파일하는 것이라 시간이 다소 소요되니까 커피라도 한 잔하면서 느긋하게 기다리자. 설치가 완료되면 Homebridge를 어디서든 호출할 수 있도록 경로를 설정해주는 편이 편리하다. 먼저 다음과 같이 node.sh 프로필을 작성한다.

sudo touch /etc/profile.d/node.sh
sudo chmod +x /etc/profile.d/node.sh

그 후 이 파일을 vi 또는 nano 같은 에디터로 열어서 다음과 같이 입력하고 저장한다.

export PATH=$PATH:/opt/nodejs/bin

이제 접속을 끊었다가 다시 재접속해보자. homebridge라는 명령을 실행하면 화려한 실행화면을 볼 수 있다. 아직 설정을 마치지 않았으므로 Ctrl+C를 눌러 Homebridge를 종료한다.

Homebridge 설정

Homebridge 설정 파일은 공식 저장소에서 제공하는 샘플 파일을 기반으로 작성할 수 있다. 다음과 같이 파일을 작성하자.

$ curl -L https://raw.githubusercontent.com/nfarina/homebridge/master/config-sample.json > ~/.homebridge/config.json

이제 ~/.homebridge/config.json에 파일을 열어서 내용을 원하는 대로 수정한다. 중요한 것은 맥 어드레스 형태로 되어있는 username 부분인데 가능한 고유한 것이 좋다. 원한다면 온라인에 있는 MAC Address Generator를 통해서 사용자 이름을 작성할 수 있다. 단, 모든 값이 숫자 또는 대문자여야 한다는 점은 주의하자.

{
  "bridge": {
    "name": "Homebridge",
    "username": "CC:22:3D:E3:CE:30",
    "port": 51826,
    "pin": "031-45-154"
  },
  "description": "Smart sweethome with Homebridge",
  "accessories": [
  ],
  "platforms": [
  ]
}

플러그인 설치

Homebridge 자체는 플랫폼일 뿐 이것만으로는 할 수 있는 일이 없다. 실제 기기를 제어하려면 그에 해당하는 플러그인을 직접 작성하거나 다른 사람이 만든 플러그인을 설치해주어야 한다. 다행히 전세계의 개발자들이 많은 플러그인을 작성해두었고 NPM에서 homebridge-plugin을 검색하면 수 백 개의 플러그인을 확인할 수 있다.

원하는 플러그인을 찾아서 설치하면 되는데 플러그인을 설치한 후에는 앞서 작성한 config.json 파일을 수정하여 플러그인을 설정해주어야 한다. 설정하는 방법은 보통 각 플러그인 저장소에 있는 config-sample.json 파일을 참고하면 된다. 예를 들어, 나는 집 거실 조명에 Broadlink의 스마트 플러그를 연결해두었다. 이 디바이스를 제어하기 위해 homebridge-broadlink-platform이라는 플러그인을 설치하기로 했다.

$ npm i -g homebridge-broadlink-platform

이렇게 설치하고 나면 Homebridge에서 플러그인을 자동으로 인식한다. 물론, 플러그인 모듈을 자동으로 인식하는 것일 뿐 실제 디바이스를 제어하려면 설정을 해주어야 한다. 이 플러그인의 저장소에 가면 config-sample.json 파일을 찾을 수 있다.

여기서 중요한 부분은 "accessories"나 "platforms"이다. 플러그인마다 사용하는 부분이 조금씩 다른데 내가 사용하는 플러그인은 "platforms"에 디바이스를 추가하도록 되어 있다. 우리집 환경에 맞게 디바이스를 설정하고 나면 이제 드디어 Homebridge를 실행해 볼 차례이다.

Homebridge 데몬화

많은 Node.js 서버가 그렇듯이 Homebridge도 사용하다보면 알 수 없는 이유로 꺼지곤 했다. 그래서 Node.js의 유명한 프로세스 매니저인 pm2를 설치하여 Homebridge 서버를 관리해주는 편이 좋다. 먼저 PM2를 설치하고 OS를 리부트할 때 PM2가 자동으로 시작되도록 설정한다. 주의할 것은 여기서 실행하는 어떤 명령어에도 sudo를 사용하지 않는다는 것이다.

$ npm i -g pm2
$ pm2 startup systemd

이렇게 실행하면 실제로 시스템에 등록하기 위한 명령어를 pm2가 다음과 같이 알려준다.

알려주는 명령어를 sudo까지 포함해서 복사한 후 실행하면 PM2가 시스템 데몬으로서 동작한다. 이제 다음 명령어를 실행하여 Homebridge를 PM2에 등록한다.

$ cd ~/.homebridge
$ pm2 start homebridge
$ pm2 save

이후 Homebridge는 다음과 같은 명령어로 제어할 수 있다.

// homebridge 중단
$ pm2 stop homebridge

// homebridge 재시작
$ pm2 restart homebridge 

// homebridge 로그 보기
$ pm2 logs homebridge 

실제 사용

그 다음 과정은 아이폰에 있는 "홈" 앱에 위에서 설정한 Homebridge를 등록하면 된다. 첫 번째 스크린샷에서 나타난 QR 코드를 입력해도 되고, 설정에 있는 핀(pin) 코드를 입력해도 된다. 앱에 나와있는 설명을 그대로 따르기만 하면 되므로 어렵지 않게 설정할 수 있을 것이다. 설정을 마쳤다면 이제 실제로 사용을 해보자. 아무런 문제가 없다면 다음과 같이 시리를 통해 집 안에 있는 기기를 음성으로 조작할 수 있다.

참고

    1. 알리익스프레스에서 샀던 만원 조금 넘는 스마트 플러그에 멀티탭 연결하고 조명 여러개를 연결해서 한꺼번에 동작하게 한 겁니다. ^^ 조명은 전부 LED라 전력 요구량이 크지 않아 그런 식으로 구성할 수 있더라고요.

  1. 자세한 글 감사합니다. 글을 따라서 샤오미 yeelight 천장등과 공기청정기, 멀티탭 등을 설치해보려고 합니다.
    홈브릿지를 이용해서 애플홈킷에 연결해 사용할 경우 기존의 샤오미홈 앱에서는 사용할 수 없는지요?

    1. 저한테 샤오미 장비는 없어서 정확하지는 않을 수 있지만, 홈브릿지를 사용해도 기존 장비에서 제공하는 전용앱은 그대로 사용할 수 있습니다. 제가 사용하는 건 BroadLink 장비인데 전용앱도 잘 동작합니다.

댓글을 남겨주세요