Introduction: Raspberry Piでホームオートメーション:Siri対応編
最近の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のフローの作成
(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のファインダに自動的に現れてファイル共有されます。
Comments