Introduction: Raspberry Piでホームオートメーション:Siri対応編

About: 組み込み系システム、ガーデニング、ドローンに興味あり

最近のiOS(iPhoneやiPad)にはデフォルトで「ホーム」アプリが最初から付属しています。「ホーム」アプリはAppleのIoTシステムであるHomekitを利用するもので、これに対応することでSiriでの音声制御も可能になります。HomekitにDIYで対応するにはhomebridgeとよばれるプラットフォームが有名でRaspberry piでも動作します。単にSiriやリモートでGPIOを制御するのであれば、homebridgeと適切なプラグインをRaspberry piにインストールすることが最も簡単な方法です。

ここでは、導入編、リモート制御編で紹介してきたconductor-liteをhomebridgeで制御できるようにするための手順を紹介します。conductor-liteはRaspberry piで動作してGPIOをタイマー等で自動制御するためのフリーのアプリケーションです。homebridgeを単体ではできなかったGPIOの制御論理を自由に設定することができます。

Step 1: 事前の確認

homebridgeのインストールに進む前に次の点を確認してください。

(1) coductor-liteがインストールされていること

  • ここで紹介しているSiri対応(Homeアプリ対応)はconductor-liteのインストールが前提です。まずは

conductor-liteをここの手順に従ってインストールしてください。

(2) coductor-liteのフローの作成

  • coductor-liteのフロー作成は実施していなくてもhomebridgeのインストールは可能ですが、本手順内での作業では、導入編およびリモート制御編で作成したフローを例に説明しています。

(3) homebridgeのconfig

  • coductor-liteはhomebridgeのconfig(~/.homebridge/confing.json)を自動で生成し適宜オーバーライトします。すでにhomebridgeをインストールしていて利用している場合にはconfig.jsonを待避させてください。他のhomebridgeアプリケーションとの併用は推奨しません。

Step 2: ソフトウェアのインストール

    (1) Raspberry piのOS最新化

    pi@raspberrypi:~ $sudo apt-get update
    pi@raspberrypi:~ $sudo apt-get upgrade

    (2) Bonjour対応

    • avahiライブラリをインストールします。
    pi@raspberrypi:~$sudo apt-get install libavahi-compat-libdnssd-dev

    (3) Node.js対応

    • homebridgeはサーバサイドjavascriptプログラムですので、Node.jsが必要です。ここではnvmを使い安定版のバージョン4.6.0を選択しました。
    pi@raspberrypi:~ $git clone  <a href="https://github.com/creationix/nvm.git" rel="nofollow"> https://github.com/creationix/nvm.git </a>  ~/.nvm
    pi@raspberrypi:~ $sudo nvm install 4.6.0
    pi@raspberrypi:~$sudo source ~/.nvm/nvm.sh
    pi@raspberrypi:~$sudo npm install -g node-gyp

    (4) homebridgeのインストール

    • homebridgeの本体と、homebridge-httpプラグインをインストールします。
    pi@raspberrypi:~$npm install -g homebridge --unsafe-perm homebridge
    pi@raspberrypi:~$npm install -g homebridge-http
    • homebridge-httpはiPhoneやiPadのホームアプリケーションからのコマンドをhttpに変換するソフトウェアです。homebridgeのconfigはプラグインに依存します。conductor-liteが自動で出力するconfigはhomebridge-httpのみで動作を確認しています。

    Step 3: Home Bridgeのセットアップ

    (1) configディレクトリ生成

    • homebridgeを起動します
    pi@raspberrypi:~ $ homebridge
    • 次のような出力がでれば正常です。
    • ^Cで停止させて、~/.homebridgeディレクトリが生成されていることを確認します
    pi@raspberrypi:~ $ ls -la
    total 120
    (中略)
    drwxr-xr-x   4 pi   pi   4096 Nov  3 14:09 .homebridge
    (略)

    (2) パーミッションの設定

    • conductor-liteがconfigファイルを書き込めるよう書き込み権を付与します。
    pi@raspberrypi:~ $ cd .homebridge/
    pi@raspberrypi:chmod ugo+w

    Step 4: Configの生成

    (1) config生成

    • conductor-liteサイトにログインします
    • editを選択します
    • フローのスイッチがavailableになっていることを確認して(①)、saveボタンを押します(②)

    (2) raspberry piでhomebridgeを起動する

    • ~/.homebridge配下にconfig.jsonが生成されていることを確認してください。
    pi@raspberrypi:~/.homebridge $ ls -la
    total 20
    drwxrwxrwx  4 pi       pi       4096 Nov  3 14:20 .
    drwxr-xr-x 23 pi       pi       4096 Nov  3 14:09 ..
    drwxr-xr-x  2 pi       pi       4096 Nov  3 14:13 accessories
    -rw-r--r--  1 www-data www-data  651 Nov  3 14:20 config.json
    drwxr-xr-x  2 pi       pi       4096 Nov  3 14:09 persist

    Step 5: ホームアプリの登録

    (1) homebridge起動

    • コマンドhomebridgeをRaspberry piに入力します。
    pi@raspberrypi:~/.homebridge $ homebridge
    • 次のようにSetting power state to onとSetting power state to offが定常的に出力されていれば正常です。

    *** 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 [11/3/2017, 2:49:50 PM] Loaded plugin: homebridge-http [11/3/2017, 2:49:50 PM] Registering accessory 'homebridge-http.Http' [11/3/2017, 2:49:50 PM] --- [11/3/2017, 2:49:50 PM] Loaded config.json with 1 accessories and 0 platforms. [11/3/2017, 2:49:50 PM] --- [11/3/2017, 2:49:50 PM] Loading 1 accessories... [11/3/2017, 2:49:50 PM] [output] Initializing Http accessory... Scan this code with your HomeKit app on your iOS device to pair with Homebridge:

    << bar code >>

    [11/3/2017, 2:49:50 PM] Homebridge is running on port 51826.
    [11/3/2017, 2:49:51 PM] [output] Switch received power http://localhost:8080/cliteGetStatus.py?mode=home... state is currently 1 [11/3/2017, 2:49:51 PM] [output] Setting power state to on [11/3/2017, 2:49:51 PM] [output] HTTP set power function succeeded! [11/3/2017, 2:49:57 PM] [output] Switch received power http://localhost:8080/cliteGetStatus.py?mode=home... state is currently 0 [11/3/2017, 2:49:57 PM] [output] Setting power state to off [11/3/2017, 2:49:57 PM] [output] HTTP set power function succeeded!

    :

    (2) iOSのホームアプリ登録

    • ホームアプリを起動して手順に従って装置を登録します。2次元バーコードは(1)で表示されたものをカメラで読み込みます。

    (3) 動作確認

    • ホームアプリの状態がLEDの点滅と同期して変化します。
    • ホームアプリのボタンを押すとLEDの点灯状態が変化します。
    • Siriに「outputをオフにして」「outputをオンにして」と指示するとそれに従ってLEDの点灯を制御できます。「outputの状態は?」と聞くと、オンかオフかを答えます。

    Step 6: 自動起動

    homebridgeを自動で起動するように設定します。こちらで紹介されている手順を参考にしました。

    (1) systemdのconfigを作成

    pi@raspberrypi:/etc/systemd/system $cd /etc/systemd/system/
    pi@raspberrypi:/etc/systemd/system $sudo nano homebridge.service
    [Unit]
    Description=homebridge
    After=syslog.target
    
    [Service]
    Type=simple
    User=pi
    ExecStart=/usr/bin/homebridge /home/pi/.homebridge
    Restart=on-failure
    RestartSec=10
    KillMode=process
    
    [Install]
    WantedBy=multi-user.target

    [参考]

    (2)のsystemctl startを実行すると次のエラーが出たりしてかなり試行錯誤しました。Node.jsのインストール方法に影響されている可能性もありますが、上記のExecStartに/usr/bin/homebridgeを指定したら解消しました。which homebridgeでは/home/pi/.nvm/versions/node/v4.6.0/bin/homebridgeなどと出力されますが、このパスでは正常に動作しませんでした。

    Nov 05 12:58:19 raspberrypi systemd[1]: homebridge.service: main process exited, code=exited, status=1/FAILURE
    Nov 05 12:58:19 raspberrypi systemd[1]: Unit homebridge.service entered failed state.

    (2) サービス登録

    pi@raspberrypi:/etc/systemd/system $sudo systemctl daemon-reload
    pi@raspberrypi:/etc/systemd/system $sudo systemctl enable homebridge
    pi@raspberrypi:/etc/systemd/system $sudo systemctl start homebridge

    これで自動起動するようになりました。動作状態の詳細は次のコマンドで確認できます。

    sudo journalctl -u homebridge

    Step 7: 参考:AppleTalkのインストール

    avahiをインストールしてBonjourにも対応しているので、ついでにAppleTalkもインストールしましょう。

    sudo apt-get install netatalk

    でインストールしリブート(sudo shutdown -r now)してください。これでRaspberry piがMacのファインダに自動的に現れてファイル共有されます。