HomeKitとRaspberry PiとIRKitで部屋の家電をSiriから音声操作する方法
こんにちは。NHNテコラスアドベントカレンダー17日目担当、運用エンジニアのワタナベです。
運用という出社日時が不安定な事を逆手にとって、美味しいお店に行くことが趣味です。
23時から焼き肉食べ放題をしたり、17時の開店に合わせて人気焼肉店のホルモンを食べに行ったり、行列必至な牛カツ専門店に開店同時に食べに行ったりしています。いやぁ、肉って最高ですね。
さて、今回のアドベントカレンダーでは趣味のおうちハック、特にHomeKitについて話そうと思います。
はじめに
HomeKitとはAppleが提唱する家電の集中管理システムです。
そのコンセプトとしてSiriへの命令で家電を操作できることにあります。
例えば、
「Hey、Siri 部屋の明かりをつけて」と言えば部屋の明かりがオンになったり、
「Hey、Siri ベランダの温度は?」と言えばベランダに設置してるセンサから温度を取得して教えてくれたり、
「Hey、Siri おやすみ」と言えば部屋の明かりがすべて消え、エアコンを静音モードにしたりできます。
でも、こんなに便利なHomeKit、実は日本ではまだほとんど対応製品が売られていないのです。
・・・ずるくないですか?
海外ではもうiPhoneに話しかけるだけでエアコンがオンになったり、部屋の明かりがついたりして遊べるわけですよ?
ということで、小型LinuxマシンRaspberry PiとAPIで操作可能な学習リモコンIRKitを使って
HomeKitを日本でも試してみようというのが今回の記事の内容になります!
Raspberry Piのセットアップから説明していくのでわかりやすい内容になってると思いますが、すごく長いのでお付き合い下さい。
最後までセットアップが出来たならば、あなたは下の動画のように部屋中の家電を操作可能になっていると思います。
Raspberry Piのセットアップ
さて、まずRaspberry Piをセットアップします。
- 用意するもの
– HDMIケーブル+ディスプレイ
– USBマウス、USBキーボード
– microUSBケーブル、USB電源
– microSDカード、microSDカードライター
– LANケーブル、ネット接続しているルーター
– Raspberry Pi
OSインストール
公式サイトに従ってNOOBSというRaspberry PiのOSをインストールしていきます。
まず、Raspberry Piの公式サイトからNOOBSをダウンロードします。
NOOBSダウンロード先
NOOBSのDownload ZIPからZIPファイルをダウンロードし、解凍します。
microSDカードカードフォーマット
先ほど解凍したフォルダの中身をSDカードにコピーすればRaspberry Piは起動するのですが、その前にmicroSDカードカードをフォーマットする必要があります。
下記リンクからSDフォーマッター4.0をダウンロードし、Raspberry Pi用のmicroSDカードをフォーマットしてください。
SDフォーマッター4.0ダウンロード先
ソフトに従いフォーマットが成功したら、「カードのフォーマットが正常に終了しました」と表示されますのでフォーマットは終了です。
OSインストール
microSDカードに先ほど解凍したNOOBSのファイルをコピーします。
このmicroSDカードをRaspberry Piに挿し、マウス、キーボード、LANケーブル、電源ケーブルを入れるとNOOBSが起動します。
Raspbianにチェックを入れ上のInstallをクリックすることでインストールが始まります。
時間が結構かかりますが正常にインストールが出来たなら「OS(es) Installed Successfully」と表示され、自動的に再起動がかかりデスクトップ画面が表示されます。
これでOSインストールは終了です。
環境設定
Raspberry Piのインストールは成功しましたが、日本語フォントはインストールされておらず、各種ソフトウェアも古い状況です。
なのでRaspberry Piをアップデートしましょう。
まず、デスクトップ上の黒い画面のアイコンをクリックし、ターミナルを起動します。
そして、下記のコマンドを実行し、アップデートを実施します。
sudo apt-get update sudo apt-get upgrade
アップデートが終了したら、次は日本語フォントをインストールします。
同じようにターミナルに日本語フォントのインストールコマンドを実行しましょう。
sudo apt-get install fonts-ipafont fonts-ipaexfont
日本語フォントをインストールしたらRaspberry Piを日本語設定に変更しましょう。
ターミナル画面を終了し、左上のメニューからRaspberry Pi Configurationを起動し、Localisationタブを選択し、Localeを日本語環境に、TimezoneをASIA/Tokyoにします。
この設定を変更すると再起動を要求されるので再起動を実施します。
再起動後、日本語が表示可能になり、いくつかメニューが日本語になっています。
これでRaspberry Piの基本的なセットアップは終わりです。
IRKitセットアップ
- 用意するもの
– IRKit
– microUSBケーブル、USB電源
– ネット接続しているルーター
IRKitをネットに接続
IRKitに電源をつなげると赤点滅してIRKitからWifiが飛びます。
IRKitの公式アプリに従い、IRKitとWifiを繋げば設定は完了します。
ものすごく簡単な説明ですが、ネット接続の詳細はアプリにわかりやすく記載してあるのでここでは省略します。
ここで注意しなければならないこととして、Raspberry Piと同じネットワークに接続することを心がけて下さい。Raspberry PiがWi-Fiで接続されているなら同じWi-Fiに、Raspberry Piが有線でルーターとつながっているならば同じルーターから出ているWi-Fiに接続してください。そうすることで、IRKitとRaspberry Piが通信可能になります。
IRKitとRaspberry Piの接続を確認してみる
さて、IRKitとRaspberry Piが同じネットワークにあるならば、
IRKitのIPアドレスわかればRaspberry Piから通信が出来るはずです。
IRKitのIPアドレスを調べるにはいくつか方法があります。
- ルーターの設定画面からIRKitの名前を探してIPアドレスを見つける
- 公式の手順に従い、IPアドレスを見つける
- Avahi(Bonjour)の機能を使ってIRKitのローカルドメインにpingを売ってIPアドレスを見つける
ここでは「3. Avahi(Bonjour)の機能を使ってIRKitのローカルドメインにpingを売ってIPアドレスを見つける」について軽く説明します。
実はRaspberry PiとIRKitにはXXXX.localという名前で通信できる仕組みが備われています。
試しにRaspberry Piのターミナルからホストを調べて、別のパソコンからpingを打ってみましょう。
もし、画面に「pi@raspberrypi:~ $」と記載されいるならば、
そのRaspberry Piには「raspberrypi.local」でpingが飛ぶはずです。
~ ❯❯❯ ping raspberrypi.local ⏎ PING raspberrypi.local (10.248.118.161): 56 data bytes 64 bytes from 10.248.118.161: icmp_seq=0 ttl=64 time=6.264 ms 64 bytes from 10.248.118.161: icmp_seq=1 ttl=64 time=7.852 ms
同じようにIRKitも名前が公式アプリ側から判断できます。
アプリのDevicesに記載されているIRKitの名前、例えばIRKit1234という名前が記載されいたならば、
同じく別のパソコンからIRKit1234.localにpingが飛ぶようになっているはずです。
~ ❯❯❯ ping IRKit1234.local ⏎ PING IRKit1234.local (10.248.120.47): 56 data bytes 64 bytes from 10.248.120.47: icmp_seq=0 ttl=255 time=10.682 ms 64 bytes from 10.248.120.47: icmp_seq=1 ttl=255 time=11.131 ms
もし、IRKitの名前がわからなくても前述しましたとおり、いくつか対応方法がありますのでそれでIRKitのIPアドレスを見つけて下さい。
以降、IRKitのIPアドレスを10.248.120.47と仮定して話をすすめます。
Raspberry PiからIRKitを操作してみる
公式ページののGET /messagesに記載してあるとおり、
IRKitにリモコンを向けて目的のボタンを押してみましょう。
その後、ターミナルから下記コマンドを打つことで赤外線情報を取得できます。
pi@raspberrypi:~ $ curl -i "http://10.248.120.47/messages" -H "X-Requested-With: curl" HTTP/1.0 200 OK Access-Control-Allow-Origin: * Server: IRKit/3.0.0.0.g85190b1 Content-Type: text/plain {"format":"raw","freq":38,"data":[5049,5049,1679,1679,1679,1679,1679,1679,1679,3704,1679,3704,1679,3704,1679,3704,1679,1679,1679,65535,0,41171,5049,5049,1679,1679,1679,1679,1679,1679,1679,3704,1679,3704,1679,3704,1679,3704,1679,1679,1679]} pi@raspberrypi:~ $
ここで、{“format”:”raw”,”freq”:~返ってきた内容が目的の赤外線信号です。
この信号をRaspberry PiからIRKitへ送信する場合は公式ページののPOST /messagesに記載してあるとおり、次のコマンドで送信できます。
pi@raspberrypi:~ $ curl -i "http://10.248.120.47/messages" -H "X-Requested-With: curl" -d '{"format":"raw","freq":38,"data":[5049,5049,1679,1679,1679,1679,1679,1679,1679,3704,1679,3704,1679,3704,1679,3704,1679,1679,1679,65535,0,41171,5049,5049,1679,1679,1679,1679,1679,1679,1679,3704,1679,3704,1679,3704,1679,3704,1679,1679,1679]}'
コマンド打った後、IRKitを確認してください。IRKitのLEDが点滅したら送信成功です。
これでIRKitセットアップとRaspberry Piとの接続確認は終わりです。
Homebridgeのセットアップ
さて、ようやくRaspberry PiにHomeKit機能を搭載します。
Raspberry PiにHomeKit機能を搭載するために、HomebridgeというHomeKit機能をエミュレーションするNodeJSサーバーを使用します。
このHomebridgeを使うことでIRKitをSiriから操作できるようになります。
ライブラリインストール
Homebridgeをインストールする前に、いくつかHomebridgeに必要なソフトウェアをインストールします。
ターミナルから下記のコマンドにてインストールできます。
avahiのライブラリをインストール
sudo apt-get install libavahi-compat-libdnssd-dev
node.jsのインストール
wget https://nodejs.org/dist/v4.0.0/node-v4.0.0-linux-armv6l.tar.gz tar -xvf node-v4.0.0-linux-armv6l.tar.gz cd node-v4.0.0-linux-armv6l sudo cp -R * /usr/local/
これでインストールは完了です。念の為、ターミナルを一度終了させて、再度実行しください。
node.jsのバージョンを調べるコマンドが次のとおりに返ってきたインストールは成功しています。
pi@raspberrypi:~/ $ node -v v4.0.0 pi@raspberrypi:~/ $ npm -v 2.14.2
Homebridgeのインストール
Homebridgeのインストールはターミナルから下記のコマンドを実行することでできます。
結構インストールには時間がかかるので気長に待ちましょう。
sudo npm install -g homebridge
次にIRKitとHomebridgeを接続するプラグインを下記のコマンドでインストールします。
sudo npm install -g homebridge-irkit
インストールが完了したら、次のコマンドで起動確認をしてみます。
pi@raspberrypi:~/ $ homebridge *** 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-irkit Registering accessory 'homebridge-irkit.IRKit' --- Couldn't find a config.json file at '/home/pi/.homebridge/config.json'. Look at config-sample.json for examples of how to format your config.js and add your home accessories.
/home/pi/.homebridge/config.jsonが存在しないから起動ができないよ!って怒られたらひとまず起動は成功です。(まだ設定してないので)
次にconfig.jsonを設定します。
先ほど出たメッセージの通りに設定ファイルを作成します。
nano /home/pi/.homebridge/config.json
config.jsonの中身は次のように書きます。
必要な赤外線信号は事前に取得してください。今回はテレビのオン・オフを想定して設定ファイルを作成します。
{ "bridge": { "name": "Homebridge", "username": "CC:22:3D:ED:CE:30", "port": 51826, "pin": "031-46-160" }, "description": "IRKit Control", "accessories": [ { "accessory": "IRKit", "name": "テレビ", "irkit_url": "http://10.248.120.47/messages", "on_form": {"format":"raw","freq":38,"data":[テレビごとに異なり、長いので省略]}, "off_form": {"format":"raw","freq":38,"data":[テレビごとに異なり、長いので省略]} } ] }
設定ファイルを保存したら、またhomebridgeコマンドを実行してください。「Scan this code with your HomeKit App on your iOS device to pair with Homebridge:」とメッセージがでて、設定ファイルにて指定したpinが現れたら起動成功です。
pi@raspberrypi:~ $ homebridge *** 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-irkit Registering accessory 'homebridge-irkit.IRKit' --- Loaded config.json with 1 accessories and 0 platforms. --- Loading 1 accessories... [テレビ] Initializing IRKit accessory... Scan this code with your HomeKit App on your iOS device to pair with Homebridge: ┌────────────┐ │ 031-46-160 │ └────────────┘ Homebridge is running on port 51826.
HomebridgeとiPhoneの接続
iPhoneでHomekitに対応するにはHomekit対応のアプリをインストールする必要があります。
今回はInsteon+をインストールしてください。
幾つかHomekit対応のアプリはありますので、好きなものを選んでもかまいません。
また、必ずiPhoneとRaspberry Piは同じネットワークに接続していることを確認してください。
同じネットワークにないとアプリがHomekitサーバーを見つけられず追加ができなくなります。
さて、インストールしたInsteon+アプリが起動したら、右上の+ボタンからAdd a Deviceをタッチし、
先ほど起動したHomebridgeサーバーを見つけます。同じネットワークにあるなら下に名前表れます。
Homekitアクセサリを追加しますか?と聞かれるので「このまま追加」を選択するとアクセサリを追加画面が出ます。
そうしたら「コードを手動で入力」をタップしてください。
そうしたら手動でpinを入力する画面がでますので、先ほどターミナルで出たpinを入力します。
これで登録は完了です。
お疲れ様でした!あとはSiriに向かって「テレビの電源をオンにして」と頼むとオンにしましたと返事をくれるはずです!
Siriはとても賢いのである程度の言い間違いや表現の違いも受け取ってコマンドを実行してくれます。IoTの未来を是非体験してください。
終わりに
以上でRaspberry PiとIRKitで部屋のリモコン家電をSiriから操作するまでの紹介でした。
ここでは紹介してませんが、Raspberry PiにセットアップしたHomebridgeというソフトウェアには様々なプラグインが存在しております。
例えば、Philips hueというLED電球を操作したり、Macの音楽を再生したり、サーバにログインしてコマンドを実行したりも可能になります。
詳しくは参考リンク先やHomeBridgeのソースコード、プラグインを調べてください。夢が広がりますよ。
参考
Siriで部屋中の家電を操作できるようにして未来のお部屋を作ってみた – ワタナベ書店
Running Homebridge on a Raspberry Pi · nfarina/homebridge Wiki
テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!
Follow @twitter新しもの好きインフラエンジニア。たまにプログラミングしたり、ハードを作っています。 趣味は読書で、たまに発狂したように読みふけります。
Recommends
こちらもおすすめ
-
ラズパイと対話する植物と自称IoT女子
2016.8.19
-
「Hey Siri 掃除をして」で、Roomba(ルンバ)に掃除をしてもらう
2016.4.22
-
Roomba(ルンバ) のお掃除状況を飼い猫に鳴いてもらう
2016.4.18
-
オーディオプレイヤーをIoTで再デザインする
2018.12.19
-
新卒 IoT 女子、自称やめるってよ
2016.7.20
Special Topics
注目記事はこちら
データ分析入門
これから始めるBigQuery基礎知識
2024.02.28
AWSの料金が 10 %割引になる!
『AWSの請求代行リセールサービス』
2024.07.16