「Hey Siri ラズパイのLEDをつけて」

この前,iPhoneをiOS10にアップデートしたら,見慣れないアプリ「ホーム」が目立つところに鎮座しておりまして,ちょいと調べてみたらApple純正のHomeKit対応のアプリであることが分かりました。

ご存じでしょうかHomeKit。iOS8で導入された,対応家電をiOSからコントロールできる仕組みです。しかしながら,対応家電は海外のものばかりで日本ではほとんど普及していないのが現実でした。

またまたApple押し売り邪魔アプリが増えたのかと思いつつ,ネットで情報を仕入れていたらSiriちゃんを使って音声コントロールが出来たりと,なかなか面白そうじゃないですか。しかも,Node.jsパッケージ「Homebridge」を使い、MacやラズパイをHomeKit対応機器にする事例がたくさんある。これはやるしかない。

1. 目標

iPhoneやiPadのSiriを使って,ラズパイに接続したLEDを点けたり消したりします。まずは目標を低く設定。

 

2. ラズパイのセットアップ

Raspberry Pi2に,現時点の最新版,RASPBIAN JESSIE WITH PIXEL(Sep. 2016)をインストールしました。ところでPIXELって何だ?

インストール手順は,当サイトの「Raspberry Pi Zeroセットアップ 完全ガイド」をお手本にすればOK。Pi ZeroとPi2との違いや、Raspbianのバージョン差はあるものの,ほぼほぼ手順は一緒です。

ガイド第1回~第8回にしたがってコツコツとセットアップしましょう。

ガイド第9回~第13回は,省略しても構いません。

 

3. Homebridgeのインストール

日本で販売されている数少ないHomeKit対応機器に,Philips Hueという照明システムがあります。これはHueブリッジと呼ばれるコントローラと,複数の電球等で構成されています。

HomeKitは,1つ1つの電球を直接制御しません。個々の電球は、Hueブリッジを介して間接的にコントロールされます。HomeKitにおいては,Hueブリッジのようなコントローラに当たる機器を「ブリッジ」と呼びます。また,Hue電球のように,ブリッジがコントロールする機器を「アクセサリ」と呼びます。

さて,今からインストールするHomebridgeは,HomeKitでいうところのブリッジに相当するものです。HomebridgeはNode.jsの追加パッケージですので,まずはNode.jsをインストールする必要があります。

都合の良いことに「Raspberry Pi Zeroセットアップ 完全ガイド」の第14回でNode.jsのインストールは経験済みです。これを参考にNode.jsをインストールしましょう。現時点のLTS版はv4.6.0ですのでこれをインストールしました。

続けて,Homebridgeをインストールします。ラズパイへのインストールは作者Wikiを参考にしました。まず、Homebridgeをインストールする前に必須パッケージをインストールしておきます。

いよいよHomebridgeをインストールします。

これで終わりではありません。HomebridgeでコントロールしようとしているLEDは,HomeKitでいうところのアクセサリに相当しますが、アクセサリに対応したHomebridge用の追加パッケージが必要となります。それはこちらで見つかります。

TVを制御するもの,ルンバを制御するもの,とにかくいっぱいあります。その中にはラズパイのGPIOを制御するものもあります。これを使えばLEDをコントロールできそうです。けれども私はhomebridge-cmdというパッケージをインストールしてみました。

homebridge-cmdを使うと、例えば「LEDをオンにして」や「LEDをオフにして」とSiriにお願いしたとき、予め設定しておいたコマンドやスクリプトを実行させることが出来ます。よって、GPIOを制御するコマンドを設定しておけばLEDを点灯/消灯できます。任意のコマンドやスクリプトを発動できるために非常に汎用性が高いです。

 

4. Homebridgeの設定と起動

Homebridgeを起動してみます。

無事起動したかのように見えまずが、config.json (/home/pi/.homebridge/config.json) not found.のところが問題です。Homebridgeの設定ファイル/home/pi/.homebridge/config.jsonを予め作成する必要があります。

また、031-45-154は、HomeKitとブリッジHomebridgeをペアリングするためのキー(デフォルト)です。

ここで、Control + Cを押下してHomebridgeを一旦終了しましょう。

 

それでは、Homebridgeの設定ファイルを次のコマンドで編集します。

内容は次のとおりです。

“bridge”の部分はブリッジHomebridgeの設定です。

  • “username”にはMACアドレスを設定します。MACアドレスのフォーマットなら適当な番号でも大丈夫なようですが、他のブリッジと重複しないようにWi-FiドングルのMACアドレスを設定しました。なお、英小文字(a-f)を記述するとエラーになりますので大文字(A-F)にします。
  • “pin”はブリッジHomebridgeのキーです。後ほどiPhoneやiPadとペアリングする際に使用します。デフォルトの「031-45-154」を任意の番号に変更しても構いません。

“accessories”の部分はアクセサリを設定する箇所です。

  • “name”はアクセサリの名称です。Siriに話しかけるときの名前になります。そのまんま「LED」にしました。なお、ホームアプリにアクセサリを登録するときに別名を設定できます。
  • “on_cmd”には「LEDをオンにして」とSiriにお願いしたときに起動されるコマンドを記述します。私の環境ではLEDがGPIO4に接続されているのでGPIO4に1を出力するコマンドを記述しました。
  • “off_cmd”には「LEDをオフにして」とSiriにお願いしたときに起動されるコマンドを記述します。GPIO4に0を出力するコマンドを記述しました。

 

再度Homebridgeを起動します。

LEDがアクセサリとして登録されていれば成功です。

 

5. iOS10 「ホーム」アプリ

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-10-01-12-03-38

iOS10 以前は純正HomeKitアプリが無く,App Storeから対応アプリをダウンロードする必要がありました。しかし、AppleはiOS10で純正アプリ「ホーム」を投入してきました。

デフォでインストールされるため何だこれは?と思った人も多いことでしょう。iOS10になって純正アプリの消去が可能になったことだしポイした人も少なくないでしょう。そのホームアプリにブリッジ「Homebridge」とアクセサリ「LED」を登録します。

ホームアプリは,ブリッジとアクセサリを設置場所で区分します。先ずは大分類「ホーム」。デフォルトで「マイホーム」という名称のホームが設定されています。左上のGPSマーク付きの○ボタンをタップすれば、ホームの設定や追加ができます。試しに「別荘」という名のホームを追加しました。

各ホームをさらに細かく分類したものが「部屋」。これについては後ほど。

 

myhome1

myhome2

 

いよいよ、ブリッジ(Homebridge)とアクセサリ(LED)を登録します。画面の「アクセサリを追加」をタップします。iPhoneとラズパイが同一LANに接続されていれば、Homebridgeが自動で検出されて次のように表示されます。

img_5380

 

Homebridgeのボタンをタップすると次のように警告が出ますが、構わずに「このまま追加」をタップします。

img_5381

 

カメラでHomeKitコード(031-45-154)を認識しようと試みるも、ターミナル上に表示されたコードをうまく認識できませんでした。そこで、「コードを手動で入力」をタップして手入力します。

img_5383

 

Homebridgeが登録されて次の画面が表示されます。

img_5385

 

 

場所に「デフォルト部屋」とありますが、変更することが可能です。場所の部分をタップすると、いくつかの部屋の候補と「新規作成」が表示されます。

img_5386

 

「新規作成」をタップして、新規の部屋を追加します。部屋といってもHomeKitが識別するためのタグなので,馬鹿正直に「リビング」とか「キッチン」とか名付ける必要はありません。私は「ラズパイ」という部屋を作成してみました。

img_5387

 

最終的に、Homebridgeは場所「ラズパイ」に登録されました。

img_5388

 

次にアクセサリ「LED」を登録します。そのために「アクセサリを識別」をタップします。

img_5389

LEDは、場所がデフォルトの部屋で、タイプがスイッチになっています。これを「ラズパイ」と「ライト」に変更します。また、「よく使う項目に含める」をオンにします。

img_5390

 

 

「完了」をタップすると登録終了です。画面にはよく使うアクセサリとしてLEDが登録されています。

img_5391

 

さて、まずは、画面に登録されているLEDのボタンをタップしてみましょう。電球アイコンが灯りました。

img_5392

 

さてさて、肝心のLEDはというと…ちゃんと光った!

img_5393

 

もう一度画面のLEDボタンを押すと…消えた!!!
オンもオフも両方ちゃんと働きました。

img_5394

 

6. Siriちゃんにお願いしてみる

成功!!!

img_5406

 

割と融通が利いたり…

img_5403

 

利かなかったり。点灯とか消灯とかはSiriのボキャブラリに無いみたい。

img_5399

 

登録されていない部屋のLEDは制御できません。

img_5401

 

LEDの状態も教えてくれます。

img_5397-1

 

7. Homebridgeを自動起動させる

supervisorを使ってHomebridgeをデーモン化します。

supervisorのインストール

設定ファイルを次のコマンドで編集

内容は次のとおり

 

再起動後、supervisorのステータスを確認すると、Homebridgeが動作しているのが確認できた。

 

8. 妻子持ちは辛いよ

(私) 「Hey Siri LEDつけて」「どう?凄いでしょう!」

(妻) 「…」

(私) 「…」

(妻) 「あんたの部屋の掃除を頼んでみな」

(私) 「…」

(妻) 「頼んでみな」

(私) 「Hey Siri 部屋を掃除して」

(Siri) 「すみませんが、それはできません。」

(妻) 「あんたの言うこと聞くのはLEDだけなんだよ!」

(私) 「…」

掃除します。