【Homebridge】Raspberry Pi でHome Gatewayサーバの構築(Homebridge + PhilipsHue)

Homebridge
スポンサーリンク

今回はラズパイの構築をした時のインストールメモになります。ネットで見ると結構色々あるにはあるんですけど、みんなVersionが違ったりシステム構築の前提が違ったりするもんで、大抵上手く行かないんですよね。 

Raspberry Pi(ラズパイ)ってなに?

Raspberry Piと言って、イギリスの会社が遊びでこんなん作れたよ~どう??

ってな感じでGEEKの間でおもちゃのような扱いをされていました。

(もともとは教育向けのおもちゃPC)

それから数年経って、世の中IoTやら組み込みAndoroid時代になってきて、「あれ?これってIoTとかセンサーとかに色々流用できるんじゃない?」と色んな会社にも注目されはじめた感じです。

ハードスペック的に見れば、安いミニPCみたいなものです。でも本当にカード型というか、スマホぐらいのサイズにクアッドコアCPU+メモリ+各種インターフェイスが乗ったLinux Mini PCですね。

自分たちでLinuxでがちゃがちゃいじれる人はこれをNASにしたり、Webサーバにしたり、VPNサーバにしたり、Applicationサーバ、Home GWにしたりして、小さな小型サーバを楽しんでるってわけです。逆にWindowsで遊びたかったならスティック型コンピューターという選択肢もあるけど、高いし、そもそもWindows OSだといじって遊ぶという感じでもないなと。 というわけで。

「ラズパイを使ってちょっと遊んでみよう!」。

既に構築済みのHue v1 + IKEA Trådfri (トロードフリ)の構成に、さらにRaspberry piをhome gateway serverにしてみようと思います。

この構成はHue bridgeやら、Tradfri GWができたら要らないんじゃ?とか思ったりもするわけですが、そこは半分遊びってことで。

先ずはラズパイとしてのセットアップなんですが、ここは特にはまるところもないし、シンプルにraspbian OSをダウンロードして、展開するだけなんで、以下のサイトを参考にしてインストール進めました。

SSHでログインできるようになったら、漸くインストール開始です。今回の構成は、お試しということで、かなりシンプルな構成にしています。ずばりHomebridgeを入れるだけ。

Homebridgeというのは、AppleのSiri/homekitのAPIがサードパーティ向けに公開されたことに伴って、ラズパイをApple homekit対応のhome gatewayにできるモジュールです。なので、これができるようになると、なんとiPhoneSiriに「Hey Siri、電気消して~」と言うと、Tradfriのライトが消えるという面白構成に。

事前準備

早速進めます。SSHでログインできるようになって、かつインターネットに接続できるようにしておくのが前提です。(apt-getがyumインストールのようなものなので)

先ずはラズパイの各種ファイルの更新

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get dist-upgrade

 NvmとNode.jsのインストール

#node.jsのバージョン管理ツール nvm をインストールする。
$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash
.bashrc をリロードする。
$ source ~/.bashrc

#インストール可能な node.js のバージョンを確認する。
$ nvm ls-remote

#バージョンを指定もしくは、--ltsや--stableでnode.js をインストールする(例は--lts)。
$ nvm install --lts
*ltsはLong Term Support (LTS) version。要は長期サポート版だから安定してるんじゃないかと思って選んでます。

#インストールversionの確認
$ node -v
v8.11.4

#複数のversionをインストールした時のためのシンボリックの自動更新をできるようにしておく
$ echo export NVM_SYMLINK_CURRENT=true >> ~/.bashrc
.bashrc を再リロードする。
$ source ~/.bashrc

個人的に最近vimがお気に入りなので、vimをインストールします

#インストールされているvimの確認
$ dpkg -l | grep vim

#vim-tinyの削除
$ sudo apt-get --purge remove vim-common vim-tiny

#vimの再インストール
$ sudo apt-get install vim

Homebridgeとプラグインのインストール

漸くhomebridgeのインストール

#homebridge の依存ライブラリをインストールする。
$ sudo apt-get install libavahi-compat-libdnssd-dev

#homebridge をインストールする。
$ npm install -g --unsafe-perm homebridge

#homebridge-philipshue プラグインをインストール
$ npm install -g homebridge-philipshue

config.jsonの作成

このファイルが実質Homebridgeの構成ファイルの肝になります。HueのIPADDRESSおよびUsernameは予め取得したものを使う想定です。(HueのHTTP APIの設定か確認GUI: http://IPADDRESS/debug/clip.html

詳細は以下Philips hue developer site参照。

Get Started - Philips Hue Developer Program
Follow 3 Easy Steps Step 1 First make sure your bridge is connected to your network and is functioning properly. Test that the smartphone app can control the li...

またHomebridgeのMACアドレスはラズパイのMACを全て大文字で記入してください。(じゃないとエラーになります。) 

$ sudo vim /home/pi/.homebridge/config.json
{
"bridge":
{
"name": "Homebridge",
"username": "MACADDRESS",
"port": 51826,
"pin": "031-45-154"
},
"description":"This is an example configuration file with one fake accessory and one fake platform. You can use this as a template for creating your own configuration file containing devices you actually own.",
"platforms": [
{
"platform": "PhilipsHue",
"name": "Hue",
"username": "USERNAME",
"ip_address": "IPADDRESS",
"excludephilips": false
}
]
}

ここまででHomebridgeのインストールはほぼおしまいです。

サービスの起動確認
$ homebridge

iPhone Homeアプリでの確認

これであとはiPhoneのホーム.appもしくは、homekit対応のアプリで、表示されるQRコードもしくは、config.jsonで設定したpin番号を直打ちして、Hueが認識されればほぼおしまいです。(+電球を部屋毎に振り分けなおす) あとは、例の魔法の言葉をiPhoneに向かって叫ぶのです。

「Hey Siri、電気つけて!!」

ま、これだけと言えばこれだけ笑。Homebridgeでの制限は、あくまでもLANの中でしか操作できないこと。これはHomebridgeのせいというよりも、ホーム.appの制限ですが。まーそれでもVPN張ってしまえばできるとは思います。(←できませんでした。どうやらL2 MACだけでHomebridgeを検索している模様・・・

あとは家にApple TV、Homepodsもしくは、iPadを設置すれば、Apple ID経由で操作できるらしいのです。そのうち、何か安く手に入れば導入を考えてみます。

サービス自動起動

この後は、Homebridgeの自動起動の設定です。こいつをやらないと、ターミナルを閉じると同時にHomebridgeが使えなくなってしまうので、あまり意味ないです。でもこいつで私はハマりました。なんかWEBに書いてあるやり方だと全くうまくいかず・・・#修正、簡単なやり方で動きました。

homebridgeの自動起動の設定

#Homebridgeを起動するシステムユーザの作成(ここではhomebridgeにしています。)
$ sudo useradd --system homebridge

#Homebridgeの構成ファイルをコピー(piユーザフォルダはダメらしい)
$ sudo mkdir /var/homebridge
$ sudo cp ~/.homebridge/config.json /var/homebridge/
$ sudo cp -r ~/.homebridge/persist /var/homebridge
$ sudo chmod -R 0777 /var/homebridge
$ sudo chown -R homebridge. /var/homebridge

#systemdファイルの作成
$ sudo vim /etc/systemd/system/homebridge.service
[Unit]
Description=Homebridge Server
After=syslog.target network-online.target
[Service]
Type=simple
User=pi
EnvironmentFile=/etc/default/homebridge
ExecStart=/usr/local/bin/homebridge $HOMEBRIDGE_OPTS
Restart=on-failure
RestartSec=10
KillMode=process
[Install]
WantedBy=multi-user.target

権限の修正
$ sudo chmod 644 /etc/systemd/system/homebridge.service

環境ファイルの設定
$ sudo vim /etc/default/homebridge
# Defaults / Configuration options for homebridge
# The following settings tells homebridge where to find the config.json file and where to persist the data (i.e. pairing and others)
HOMEBRIDGE_OPTS=-U /var/homebridge
# If you uncomment the following line, homebridge will log more
# You can display this via systemd's journalctl: journalctl -f -u homebridge
# DEBUG=*

Systemdの起動確認
$ sudo systemctl daemon-reload
$ sudo systemctl start homebridge
$ sudo systemctl status homebridge
$ sudo systemctl enable homebridge

と、これでおしまいのはずなんですが、なんだか全然起動してないんですよ。Homebridgeはマニュアルコマンドで起動できたのに。

実際ログをみると全然うまくいってません。

$ tail -f /var/log/syslog
Aug 30 23:18:38 raspberrypi systemd[2711]: homebridge.service: Failed at step EXEC spawning /usr/local/bin/homebridge: No such file or directory
Aug 30 23:18:38 raspberrypi systemd[1]: homebridge.service: Main process exited, code=exited, status=203/EXEC
Aug 30 23:18:38 raspberrypi systemd[1]: homebridge.service: Unit entered failed state.
Aug 30 23:18:38 raspberrypi systemd[1]: homebridge.service: Failed with result 'exit-code'.
Aug 30 23:18:49 raspberrypi systemd[1]: homebridge.service: Service hold-off time over, scheduling restart.
Aug 30 23:18:49 raspberrypi systemd[1]: Stopped Homebridge Server.
Aug 30 23:18:49 raspberrypi systemd[1]: Started Homebridge Server.
Aug 30 23:18:49 raspberrypi homebridge[2730]: /usr/bin/env: `node': そのようなファイルやディレクトリはありません
Aug 30 23:18:49 raspberrypi systemd[1]: homebridge.service: Main process exited, code=exited, status=127/n/a
Aug 30 23:18:49 raspberrypi systemd[1]: homebridge.service: Unit entered failed state.
Aug 30 23:18:49 raspberrypi systemd[1]: homebridge.service: Failed with result 'exit-code'.


どうやら起動パスが間違っているらしく、以下のシンボリックリンクを追加で設定したところ漸くうまくいきました。

$ sudo ln -s /home/pi/.nvm/current/bin /usr/local/bin

#もし/usr/local/binが既に他のアプリで使われているようであれば、以下で個別に追加
$ sudo ln -s /home/pi/.nvm/versions/node/v8.11.4/bin/node /usr/local/bin/node
$ sudo ln -s /home/pi/.nvm/versions/node/v8.11.4/bin/homebridge /usr/local/bin/homebridge

そもそも/home/pi/.nvm/versions/node/v8.11.4/bin/homebridgeを起動パスに指定したかったのですが、どこかのサイトでpiユーザフォルダのファイルは起動パスに設定できないらしく、仕方がないのでこういう形にしています。 

ともかくこれでうまく行ったので、結果オーライにしましたが、ほかの人はどうやってインストールしてたんだろうな。多分今回はNVM+Node.jsの構成にしたんですが、通常はNVM無しにしてるのかもしれないです。

ともかく動いているのでOKです。今後はNature Remoやら、IFTTTを組み合わせて更なるスマートホーム化をやってみたいなと思ってます。

今回使用した機器(Raspberry Pi)

これとは別にHDMIケーブル、2.5A以上のMicroSB電源、16GBカード、マウス&キーボードなど必要ですのであしからず。全部まとめてのものもあるようです。

Comments

スポンサーリンク
こちらの記事も読まれています
スポンサーリンク

この記事を書いた人

Taka

モバイルシステムエキスパート。某大手IT企業でエンジニアをやりながら、モバイルIT系ブロガーをやっております。独学でプログラミング勉強してWEBアプリ作ったりしながら、日々の生活の中で面白そうな情報を記事にしています。レビュー依頼などはお問合せからお願いします。

\フォローする/
タイトルとURLをコピーしました