HomebridgeとRaspberry Piを使ってHome Kitの実験をしてみた
TwitterでHomebridgeとRaspberry Piを使ったHome Kitのデモが流れていたので、私も真似をしてやってみました。これ、面白いです! Siriを使って音声でRaspberry PiにつないだLEDをOn/Offできるまでの手順を簡単に示します。
今回の実験はRaspberry Pi 2とRaspbian Wheezyを使っています。Raspbianはずいぶん前にインストールしたものですが、apt-get upgradeで最新の状態にして一連のインストールを行いました。最新のRaspbianはJessieになっていますが、Jessieでは試していません。そのため、最近RasPiを買ってRaspbianをインストールした方には以下の手順は適用できませんのでご注意下さい。
WebIOPiのインストール
今回の実験では、Raspberry PiにLED制御(Raspberry PiのGPIO制御)用のREST APIを作り、Home KitからこのREST APIを叩くことでLEDの制御を行うことにします。そのために、REST APIの提供とGPIOの制御を同時にできるWebIOPiを使用します。WebIOPiのインストールはリンクの手順 に従って行いました。リンクの手順はv0.6.0を使っていますが、執筆時点で最新のv0.7.1を使っています。
WebIOPiのv0.7.1はRaspberry Pi 2に対応していないため、以下の手順でパッチを当ててからビルドします。
wget http://sourceforge.net/projects/webiopi/files/WebIOPi-0.7.1.tar.gz tar xvzf WebIOPi-0.7.1.tar.gz cd WebIOPi-0.7.1 wget https://raw.githubusercontent.com/doublebind/raspi/master/webiopi-pi2bplus.patch patch -p1 -i webiopi-pi2bplus.patch sudo ./setup.sh
WebIOPiが動くようになったら、LEDをつなぐGPIOポート(今回はGPIO 17を使用)を出力に設定しておきます。
NodeJSとHomebridgeのインストール
このリンクの手順に従って、NodeJSをインストールします。NodeJSをインストールする前にGCC 4.9をインストールする必要があり(Raspberry PiのGCCはバージョンが古くC++14に対応していないため)、Install C++14の手順に従って行います。
リンクの手順ではNodeJSは4.0.0を使っていますが、執筆時点のLTS版であるv4.2.6をインストールしました。私はRaspberry Pi 2を使っているので、ARMv7版を使いました。
続けて、AvahiとHomebridgeをインストールします。
Homebridge Pluginのインストール
HomebridgeをインストールしただけではLEDや電球の制御は行えず、そのためにはプラグインをインストールする必要があります。プラグインはリンクにあるように90近くがあり何を使ったら良いか迷いますが、Raspberry PiのREST APIを叩くことでLEDの制御ができるように、httpベースのプラグインを探しました。今回は、homebridge-httpというプラグインを使います。プラグインのインストールは次のコマンドで行います。
sudo npm install -g homebridge-http
Pluginの設定
インストールしたプラグインをhomebridgeが認識するために、/home/pi/.homebridge ディレクトリにconfig.jsonという名前のファイルを作成します。config.jsonの内容は以下の通りです。
{ "bridge": { "name": "Homebridge", "username": "B8:27:EB:4D:31:D7", "port": 51826, "pin": "031-45-154" }, "accessories": [ { "accessory": "Http", "name": "部屋のランプ", "switchHandling": "yes", "http_method": "POST", "on_url": "http://localhost:8000/GPIO/17/value/1", "off_url": "http://localhost:8000/GPIO/17/value/0", "status_url": "http://localhost:8000/GPIO/17/value", "service": "Light", "brightnessHandling": "no", "brightness_url": "http://localhost/controller/1707/%b", "brightnesslvl_url": "http://localhost/status/100054", "sendimmediately": "", "username" : "webiopi", "password" : "raspberry" } ] }
設定ファイルのポイントは以下です;
- bridgeのusernameはMACアドレスの形式ならなんでもよいみたいですが、Raspberry PiのMACアドレスにしています
- accessoriesのon_rul/off_urlにWebIOPiのREST APIに従ってGPIO制御のurlを記述します。私はGPIO 17番を使っています
- WebIOPiはusername/passwordを使った認証機能があるため、accessoriesにデフォルトのusername/passwordを設定しています
Homebridgeの起動
homebrigeを起動すると以下のようなメッセージが出れば起動成功です。
*** WARNING *** The program 'node' uses the Apple Bonjour compatibility layer of Avahi. *** WARNING *** Please fix your application to use the native API of Avahi! *** WARNING *** For more information see *** WARNING *** The program 'node' called 'DNSServiceRegister()' which is not supported (or only supported partially) in the Apple Bonjour compatibility layer of Avahi. *** WARNING *** Please fix your application to use the native API of Avahi! *** WARNING *** For more information see Loaded plugin: homebridge-http Registering accessory 'homebridge-httpstatus.Http' --- Loaded plugin: homebridge-lockitron Registering accessory 'homebridge-lockitron.Lockitron' --- Loaded config.json with 1 accessories and 0 platforms. --- Loading 1 accessories... [部屋のランプ] Initializing Http accessory... Scan this code with your HomeKit App on your iOS device to pair with Homebridge: ┌────────────┐ │ 031-45-154 │ └────────────┘ Homebridge is running on port 51826.
iPhoneにHome Kitアプリをインストール
iPhoneにHome Kitアプリをインストールします。私はアップルのHomeKit Catalogを使用しました。本アプリはソース形式で配布されているため、Xcodeを使ってビルドする必要があります。ダウンロードにはDevelopperアカウントが必要だと思います。HomeKit Catalog以外にも、App Storeに登録されたHome Kit対応のアプリがあるようですので、HomeKit Catalogがダウンロードできない場合にはApp Storeのアプリを使用可能です。
Home Kitアプリを起動してアクセサリの登録を行い、LEDを制御するための「シーン」を設定します。細かな手順は割愛しますが、アプリを触っていると使い方はわかると思います。
動作イメージ
一連の設定でSiriを使ってRaspberry PiにつないだLEDを音声でOn/Offができるようになります。操作のデモを動画に撮ってYouTubeにアップしました。
最近のコメント