라즈베리 파이와 아이폰 시리로 홈 오토메이션 - 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 장비인데 전용앱도 잘 동작합니다.

  2. 좋은 글 감사합니다. 이쪽 무뇌안이에요. 궁금한 것이 있는데~ 홈브리지가 어떻게 iot장비들을 인식해서 아이폰 홈앱에 보내주는지가 궁금합니다.
    제가 생각하기에는 iot장비들이 무조건 wifi를 지원해야 하며, 같은 통신망에 있는 홈브리지가 그 iot장비를 인식하고, iot장비를 인식한 홈브리지를 아이폰 홈앱으로 확인하는 방식인가요?
    만약 아니라면 원리가 어떻게 되는지 궁금한데요. 간단하게 알려 주실 수 있나요?^^

    여쭤보는 이유는 제가 스위치봇이라는 제품을 제품과 브릿지 둘다 구매해서 사용하려고 하는데, 홈킷을 지원하는 제품이 아니여서요. 위와 같이 설명하는 방식이라면 시도해볼 가치가 있다고 생각하는데 어떤가 해서요^^

  3. 안녕하세요. 좋은글 감사합니다. 제가 이쪽에 무뇌안이라 여쭤봐요^^

    궁금한 점은 홈브리지가 어떻게 iot장비를 인식하느냐?에 있습니다.
    제가 생각하기로는 iot 장비들이 모두가 wifi를 지원해야 하며,
    같은 통신망에 있는 홈브리지가 그 iot장비들을 자동으로 인식한 후
    홈앱을 통해 홈브리지가 인식한 iot장비들을 보고 제어할 수 있다.
    라고 생각이 드는데 맞는지요.

    제가 여쭤보는 이유는,
    제가 구매하려고 하는 제품이 스위치봇이라는 iot장비에요.
    스위치봇 제품과 외부에서도 제어 가능하게 하는 브릿지와 같이 구매하려고 하는데
    이 제품이 홈킷을 지원하지 않습니다.
    만약 홈브릿지가 이 스위치봇을 인식하는게 가능하다면 한 번 시도해 보고 싶은데
    어떻게 생각하시나요?^^

    1. 대체로 IoT 장비라고 하면 WiFi 등으로 네트워크에 항상 접속해있고 네트워크를 통해 장비에서 정보를 읽거나 장비를 제어할 수 있는 게 기본입니다.

      말씀하신 스위치봇이라는 장비에 대해서는 잘 모르지만, WiFi에 접속이 되고 전용 앱이든 뭐든 네트워크로 다룰 수 있는 방법이 있다면 1차 관문은 통과입니다. 그 다음은 홈브릿지에 해당 장비를 지원하는 플러그인이 있는가를 봐야하는데 이건 검색을 해보셔야 할 것 같습니다. 두 가지 모두 만족시킨다면 해당 장비에서 공식적으로 홈킷을 지원하지 않아도 상관없이 시리-홈브릿지-장비와 같이 연결하여 시리로 제어할 수 있습니다.

      제가 본문에서 서술한 브로드링크 스마트 플러그도 홈킷은 지원하지 않지만, 홈브릿지에 관련 플러그인이 있어서 같은 방식으로 사용하고 있습니다.

댓글을 남겨주세요

This site uses Akismet to reduce spam. Learn how your comment data is processed.