Quantcast
Channel: Todotaniのはやり物Log
Viewing all articles
Browse latest Browse all 48

HomebridgeとRaspberry Piを使ってHome Kitの実験をしてみた

$
0
0

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にアップしました。


Viewing all articles
Browse latest Browse all 48

Trending Articles