irMagician は本コラムでも以前に「CuBox-i/HB に 小型赤外線リモコン irMagician をつなぐ」で取り上げた。irMagician はPetapicoショップでも販売をしている大宮技研(http://www.omiya-giken.com/)の開発による学習型赤外線リモコン・ボードです。これを、iPhoneのSiriのコマンドで動かしてみせる、というのが今回の趣旨です。今回の記事は、「CuBox-i/HB に 小型赤外線リモコン irMagician をつなぐ」どおりにirMagicianが動作している状態を 前提とします。
PetapicoShop主催のピコフォーラムイベントを通じて、大宮技研でIrMagicianをRaspberryPiを使ってSiriで動作させるという発表をいただきました。(http://www.omiya-giken.com/?page_id=2100) 今回はCuBoc-iでの追加検証をしてみます。
Homekitとは
まずはAppleが提唱する家電の集中管理コンセプトと仕組みをまずおさらいしておきます。(中途半端な聞きかじりだけを書いている記事にはご注意を)
Homekitでは以下の内容に従いデバイスを振り分けします。
ユーザーは好きなようにHomekitにつなげたデバイスを部屋や場所、状況などで配置や設定を行うとSiriでコマンドを出しやすくできます。
デバイス
デバイスとは、Homekitに登録される各家電装置やガジェットのことです。電球1つでも固有の名前がふられます。デバイスの名前はHomekitアプリ側でも変更可能です。
各デバイスの操作は「Hey Siri、[デバイス名]を◯◯して」という風に操作します。
ルーム
各デバイスを部屋ごとにまとめる単位です。例えばベッドルームというルームを設定し、そこにLED電球を1つとエアコンをいれたり、リビングというルームを設定し、そこにLED電球を2つ、テレビ、エアコンを設定するなどします。
ルームにいれたデバイスは抽象化され「Hey Siri、[ルーム名]のXXを◯◯して」と操作できます。例えば「Hey Siri、リビングの明かりを消して」と命令し、電球2つを同時に操作できるわけです。
ゾーン
ルームをまとめる単位です。例えば寝室と書斎が2Fにあった場合は2階というゾーンを設定したり、ベランダと玄関で外というゾーンを設定できます。
ゾーンはルームの家電をまとめて操作できる仕組みで、基本的にルームと使い方は変わりません。「Hey Siri、2階の明かりを消して」を言えば2階すべての明かりが消えます。
シーン
各デバイスの設定を一括で変更できます。例えば「おはよう」というシーンを作り、部屋の明かりをオン、テレビをNHKに選択というコマンドを「おはよう」のシーンに設定すれば、「Hey Siri、おはよう」と話かけることで、1つの命令で部屋の明かりが点灯し、テレビが指定のチャネルを表示します。
スケジュール
シーンで設定した設定を日時指定で実行できます。例えば月−金07:00におはようのシーンという設定ができます。
HomeKitは、iPhoneのHomeアプリでコントロールするもので、クラウドサービスではありません。家の外からコントロールするためには、AppleTVかiPadを動かしておくことが必要となります。また、制御されるデバイスは、HomeKitの認証をとったものでなくてはなりません。
HomeアプリはSiriのコマンドで装置をまとめて制御できるシーンが使えることが魅力的です。
さて、HomeKit対応製品ではない一般の家電をHomeKitで制御したいとなったら、
(1)ON/OFFくらいでよければ、HomeKit対応の電源プラグ型のスイッチを買って使えます。炊飯器や照明、シャッターなどはこれでいけます。
(2)赤外リモコンについては、HomeKitでは認証がされません。従ってeRemoteやIrKitなどの 機器は今後ともHomeKit認証はされません。すでに使っているエアコンを制御したいとなっても、赤外を使った家電制御はHomeKitとして商品になることはありません。
そこで今回のように自作することになります。
端的に今回の目標をひとことでまとめると、Siriを使い、赤外リモコン信号をIrMagicianから出して従来のエアコンを家の内外からON/OFFできるようにします。 ただし、もう一度確認で言いますがHomeKitでは従来のエアコンを赤外線で操作することはできません。
iOS上の設定は、本家のサイトが詳細で間違いないので「iPhone、iPad、iPod touch でホーム App を使う」(https://support.apple.com/ja-jp/HT204893)を参照するといいでしょう。
以上が長い前置きです。なぜにhomebridgeなのかを理解いただけたかと思います。
それでは、インプリの流れは 次の通りです。今回は赤外線リモコン装置として、以前コラムでもとりあげたIrMagicianを使用します。対象ハードウェアに対するHomebridgeのPluginが存在する場合にはconfig.jsonの設定だけで済みます。今回は特定のpluginがないのでコマンドライン入力用のpluginを使います。
まずはirMagicianをコマンドラインから使う環境整備から始めます。
1. ツール、コマンド、Pythonをインストール
2. irMagicianの起動
3. 対象デバイス用のjsonファイル作成
次にhomebridgeの環境を整えます。
4. CuBox-i(HummingBoardでもOK)にLinux(UBUNTU,Debian)をインストール
5. node.js, npm をインストール
6. libavahi-comat-libdnssd-devをインストール
7. HomeKitの核となるhomebridgeをインストール
8. homebridge pluginをインストール
9. homebridgeの設定、config.jsonの設定
10. homebridgeを起動
11. iOS側でアクセサリを追加
それではポイントを説明します。
irMagicianを使えるようにする
これの詳細はペタピココラムの
「CuBox-i/HB に 小型赤外線リモコン irMagician をつなぐ」
を参照してください。
sudo apt-get install python-pip
sudo pip install pyserial
git clone https://github.com/netbuffalo/irmcli.git
次にリモコンデータの取得
python irm.py -c
データの取得が完了したら、取得したデータが利用出来るかどうか試します。
python irm.py -f -s “filename.json”
問題がないようでしたら、セーブします。
node.js, npm のインストール
やることは明確ですが、最初のnode.jsのインストールからうまくいかないことが多いです。
ググるとあまたの「実例」がでてくるのですが、正直それらは参考にせず、急がば回れ。
https://nodejs.org/
本家を見てインストールするのがよい。歴史的にもバージョンが複雑なので、訳がわからなくなりがちです。PC Linuxの手順ではインストール完了しているのにコマンドが実行できないというようなこともありえます。
curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
sudo apt-get install -y nodejs
npmでネイティブアドオン追加時に備えて次も入れておきます。
sudo apt-get install -y build-essential
なお、
sudo apt-get install -y nodejs npm
でも普通にnode.js, npm をインストールできるように見えますがバージョンなどで何度もはまりました。
nodejsがうまくいったら、nもインストールしてしまいます。
sudo npm cache clean
sudo npm install n -g
sudo n --version
versionが見れたらうまくいっているはずです。
homebridgeのインストール
先に必要なavahiのライブラリをインストールします。
sudo apt-get install libavahi-compat-libdnssd-dev screen
homebridge本体をインストールします。
sudo npm install -g homebridge –unsafe-perm
homebridge-cmdプラグインのインストール
sudo npm install homebridge-cmd -g
これによりコマンドラインが実行出来るようになります。
config.jsonの記述をします。以下は例
{ "bridge": { "name": "irMagician for HomeKit", "username": "XX:XX:XX:XX:XX:XX", "port": 51821, "pin": "xxx-xx-xxx" },
"description": "Living room", "platforms": [], "accessories": [ { "accessory": "CMD", "name": "電気", "on_cmd": "sudo python /home/pi/.homebridge/data/irm.py -p -f /home/pi/.homebridge/data/LightOn.json", "off_cmd": "sudo python /home/pi/.homebridge/data/irm.py -p -f /home/pi/.homebridge/data/LightOff.json" }, { "accessory": "CMD", "name": "コンセント", "on_cmd": "sudo python /home/pi/.homebridge/data/irm.py -p -f /home/pi/.homebridge/data/OutletOn.json", "off_cmd": "sudo python /home/pi/.homebridge/data/irm.py -p -f /home/pi/.homebridge/data/OutletOff.json" }
] } |
"
username": "XX:XX:XX:XX:XX:XX" XXはWifiデバイスのMACアドレス
"pin": "xxx-xx-xxx" xxはiOSで設定するときのピンコードになる
"accessory"は
“name”は日本語で記述します。
nameに記載する名前がSiriのHomekit対応デバイス一覧に登録されます。
“on_cmd”, “off_cmd”にはそれぞれのコマンドをフルパスで記述します。
自分の環境に合わせて、記述します。
また、config.jsonの編集にはJSON lintが推奨されています。(テキストエディタではハマることもあります)
homebridgeの起動
上記の設定がすべて終わったら、homebridge を起動してみます。コマンドラインから
homebridge
で起動します。*** WARNING *** が出ても無視していいと公式に書かれているので気にしません。
Loading 1 accessories…
….
Homebridge is running on port xxxxx
が表示されたら成功。
動作がうまく行くのが確認できたらデーモン化して安定運用できるように挑戦してみてはいかがでしょう。
今後、homebridgeやIFTTTなどはもっと取り上げていく予定です。
コメントをお書きください