技術を磨くだいぱんまん

散歩とインターネットが大好きなシステムエンジニア。暮らし、おでかけ、テクノロジーについて書いています。

Raspberry Pi+IRKit+Homebridgeを使って自宅の家電をSiriで音声操作してみました

f:id:donchan922:20170817143008j:plain

2017/8/22更新
IRKit+IFTTTを使って指定した時間に家電を自動操作する記事を書きました。詳細は記事下の関連記事をご覧ください。

こんにちは、だいぱんまん(@donchan922)です。

  • 「Hey Siri!照明OFF」
  • 「Hey Siri!エアコンON」
  • 「Hey Siri!テレビON」

こんな感じでiPhoneのSiriに話しかけるだけで自宅の家電を操作できるようにしてみました。これ実際にやってみると便利で、リモコンを探す必要がなくなったり、寝るときにわざわざ寝室の照明を消しに立ち上がる必要がなくなったりします。

この仕組みを実現してくれるのが、IRKitという製品です。赤外線のリモコンで操作する家電であれば、基本的にどんなものでも公式アプリやSiriを使って遠隔操作できます。すごい!

公式アプリを使うと、プログラミングなしで簡単に家電を遠隔操作できます。ただ、Siriに話しかけて操作することはできません。そこでIRKitが提供している開発ツールを使って実現してみました。

完成形がこちら

自宅のエアコン、扇風機、照明のON/OFFをSiriで操作しました。未来感すごい!

仕組みについて

f:id:donchan922:20170817102542p:plain
AppleはiOS端末(iPhoneやiPad)から機器を操作できる「HomeKit」という機能を提供しています。HomeKit対応製品はSiriから操作することができます。

Homebridgeは、HomeKitのAPIをエミュレートする軽量なNodeJSサーバ(Webサーバ)です。簡単に言うと、HomeKitのオープンソース版のようなものですかね。これを用いるとHomeKit対応製品でなくとも、多くの製品がHomeKitに対応できます。IRKitもHomebridgeを利用することで、Siriから家電を操作することができます。

Raspberry PiはHomebridgeを起動させるためのWebサーバとして使いました。他のPCやMac上で起動させることも、もちろん可能です。

IRKitはHomebridgeからHTTPリクエストを受け、それをもとに対象の家電に赤外線で信号を送ります。これによりSiriから家電を操作することができます。

必要なもの

すでにPCがあることを想定しています。ちなみに今回はMac(macOS Sierra v10.12.5)を使用しました。以下、準備するものです。

Raspberry Pi

前提として、Raspberry Piのセットアップが完了しているものとします。セットアップに必要な機器および手順は以下の記事でまとめています。

Raspberry Pi 3にRASPBIAN JESSIE WITH PIXELをSSH経由でセットアップする方法 - 技術を磨くだいぱんまん

USBケーブル

USB2.0ケーブル(タイプAオス-マイクロBオス)を用意しましょう。IRKitとACアダプタを接続するときに使います。

リモコンスイッチ

照明をリモコンで操作できるようにするスイッチ。照明のON/OFFを切り替えたい場合はこれ使うと便利です。リモコン対応していない家電を操作したい場合は、リモコンコンセントを導入するのがいいと思います。

実装手順

IRKitのセットアップ

まずは以下のIRKit公式アプリに従って、IRKitの初期設定を行います。公式アプリの手順が丁寧にまとめられているので、ここでは詳しく説明しません。手順を簡単にまとめると以下のとおりです。

  • IRKitの電源を入れる
  • 家のWi-Fiの設定を行う
  • IRKitとiPhoneを接続する


IRKitシンプルリモコン

IRKitシンプルリモコン

開発元:Masakazu Ohtsuka
無料

posted with アプリーチ

IRKitとRaspberry Piの接続確認

IRKit公式サイトの手順を参考にしました。まずはIRKitのホスト名(.localホスト名)を確認します。

Mac上で以下コマンドを入力し、表示されたInstance Name.localがIRKitのホスト名になります。以下の例では、irkitXXXX.localがそれにあたります。メモしておきましょう。

$ dns-sd -B _irkit._tcp

Browsing for _irkit._tcp
DATE: ---Thu 17 Aug 2017---
10:52:56.817  ...STARTING...
Timestamp     A/R    Flags  if Domain               Service Type         Instance Name
10:52:58.061  Add        2   4 local.               _irkit._tcp.         irkitXXXX


IRKitのホスト名が確認できれば、IRKitとRaspberry Piの接続確認を行います。適当なリモコンのボタンをIRKitに向けて押します。その後、Raspberry Pi上で以下コマンドを入力し、赤外線情報を取得できれば接続確認完了です(irkitXXXX.localの部分はさきほどメモしたIRKitのホスト名です)。以下例だと、[18031,8755,1190, ... ,1190]が赤外線信号になります。この値は各リモコン各ボタンによって異なります。

$ curl -i "http://irkitXXXX.local/messages" -H "X-Requested-With: curl"

HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Server: IRKit/2.1.3.13.gbe33d36
Content-Type: text/plain

{"format":"raw","freq":38,"data":[18031,8755,1190,1190,1190,3341,1190,3341,1190,3341,1190,1190,1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,1190,1190,1190,1190,1190,1190,1190,1190,3341,1190,3341,1190,1190,1190,3341,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,65535,0,9379,18031,4400,1190]}

Homebridgeのセットアップ

以下サイトが大変参考になりました。これ以降はすべてRaspberry Pi上でコマンドを入力していきます。

Running Homebridge on a Raspberry Pi · nfarina/homebridge Wiki · GitHub

以下コマンドで、必要なライブラリをインストールします。

$ sudo apt-get install -y nodejs
$ sudo apt-get install libavahi-compat-libdnssd-dev


以下コマンドで、Homebridgeをインストールします。

$ sudo npm install -g --unsafe-perm homebridge


以下コマンドで、IRKitをSiri(Homekit)で操作するためのプラグインをインストールします。

$ sudo npm install -g homebridge-irkit


以下コマンドで、設定ファイルの内容を以下のとおり変更します。

$ nano /home/pi/.homebridge/config.json

{
    "bridge": {
        "name": "Homebridge",
        "username": "XX:XX:XX:XX:XX:XX",
        "port": 51826,
        "pin": "031-45-154"
    },

    "description": "IRKit Control",

    "accessories": [
       {
           "accessory": "IRKit",
           "name": "照明",
           "irkit_host": "irkitXXXX.local",
           "on_form": {"format":"raw","freq":38,"data":[赤外線信号]},
           "off_form": {"format":"raw","freq":38,"data":[赤外線信号]}
       }
   ]
}

各パラメータの補足を以下にまとめます。

bridge

  • username:Raspberry PiのMacアドレス(英字部分は大文字で記述すること)
  • port:Homebridgeの待受ポート
  • pin:HomebridgeをHomeKitアクセサリに追加するためのコード

accessories

  • name:「Hey Siri」で呼ぶ名前
  • irkit_host:IRKitのホスト名
  • on_form:リモコンのONの赤外線信号
  • off_form:リモコンのOFFの赤外線信号

Raspberry PiのMacアドレスは以下コマンドを入力して確認します。Raspberry Piを有線で繋いでいるならeth0、無線ならwlan0ハードウェアアドレスがそれにあたります。

$ ifconfig


リモコンのON/OFFの赤外線信号は、「IRKitとRaspberry Piの接続確認」で実施したコマンドで確認してください。複数のリモコンを登録する場合は、"accessories": [...]の中に複数の設定を記述してください。


以下コマンドで、Homebridgeを起動します。

$ homebridge


Raspberry Piの起動時にHomebridgeを自動起動する場合は以下コマンドを入力します。まずはScreenをインストールします。

sudo apt-get install screen


以下コマンドで設定ファイルを開きます。

sudo nano /etc/rc.local


exit 0行の直前に以下コマンドを記述します。これでHomebridgeの自動起動設定は完了です。

su -c "screen -dmS homebridge homebridge" -s /bin/sh pi

Siriと連携する

f:id:donchan922:20170817134306p:plain
iOS10以上のiPhoneなら、「ホーム」アプリがインストールされているはずです。アプリを起動し、「アクセサリを追加」をタップします。


f:id:donchan922:20170817134318p:plain
Homebridgeが起動していれば、自動でHomebridgeをアクセサリとして認識してくれます。HomeKitコードは、Homebridgeの設定ファイル内に記述したpinの値です。


f:id:donchan922:20170817134325p:plain
HomeKitコードを入力すると、ホームアプリにHomebridgeが追加されます。


f:id:donchan922:20170817134331p:plain
このあたりの設定は特にいじらなくて大丈夫です。画面右上の「次へ」⇒「完了」で設定を完了させます。


f:id:donchan922:20170817134337p:plain
ホームアプリのアクセサリに追加されました。今回の場合、タップすると照明がON/OFFされます!すごい!


f:id:donchan922:20170817134347p:plain
Siriに話しかけても照明をON/OFFできます!すごい!

まとめ

音声だけで家電を操作できるなんて未来感あふれます。数年後には一般の人でも簡単に家電を音声操作、遠隔操作できたりするのかなとも思いました。

少し気になったのは、IRKitが放射する赤外線の距離です。壁をはさんだり、家電から離れたところにIRKitを置いたりすると、赤外線がうまく家電に届かないことがありました。IRKitが使えるのはあくまでも赤外線が家電に届く範囲ということですね。

あと外出先から自宅の家電を操作することもできるみたいなので、時間があればそれもしてみようと思います。

IRKitの後継として、Nature Remoが2017年9月頃に発売されるようです。こちらも面白そう。詳細は以下リンクをご覧ください。

Nature