라즈베리 파이와 아이폰 시리로 홈 오토메이션 - 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차 관문은 통과입니다. 그 다음은 홈브릿지에 해당 장비를 지원하는 플러그인이 있는가를 봐야하는데 이건 검색을 해보셔야 할 것 같습니다. 두 가지 모두 만족시킨다면 해당 장비에서 공식적으로 홈킷을 지원하지 않아도 상관없이 시리-홈브릿지-장비와 같이 연결하여 시리로 제어할 수 있습니다.

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

Leave a Reply to taggon Cancel reply

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