家電を自動コントロールするようにしたいと思います。追記:あれから半年運用しましたが問題なしです!IRkitでスマートホームを構築した序盤は電気のONとOFFしかしてなくてそれほど活用しているとはいえませんでしたが、半年運用しながら気が向いた時に「これも操作できるのでは?」「こんな自動化をしたら?」「この操作は自動化の必要なかった。」といった感じで見直しをしたりもう一台購入しました。今現在はこんなことを自動化しています。平日のお昼の12時にルンバをONにして部屋の掃除この記事を書いた時は冬だったが、追記している今は夏なので仕事が終わって自宅の最寄り歴に付いたらエアコン冷房をON自宅を出る時に家中のエアコンと電気のOFF(消し忘れ時も安心)自宅についたら家中の電気をON電気つけっぱとエアコンつけっぱで値落ちしても深夜になると自動でOFF(風邪を防止して安眠)朝になったら電気をつけて起こしてもらう最初に書いた設定値に改善点なども見つかったのでそれは追記しておきました。Homekitに対応した製品がAppleから発売されるのが一番ですが発売されていないのが現状です。発売されるのを待つとなると数年先になるのではないかと思います。エンジニアであれば今すぐに赤外線で操作できる家電をコントロールできます。それにはIRkit(製品)とHomebridge(npm)を使います。IRkitとは?IRkitとは赤外線を送信して、リモコンで操作できる家電製品を操作することができる端末です。この端末には内部ネットワークからHTTPリクエスト経由で任意の赤外線を送信するAPIがあるため、Curlで赤外線情報を含むJSONを送信して家電を操作することができます。HomekitとIRkitの仲介役を担うのがNode.jsのnpmであるHomebridgeです。Homebridgeの仕事は予め定義されたconfig.jsonに基づいてネットワーク上に常駐します。Homekitからの要求を受けたらconfig.jsonの赤外線情報をIRkitへ送ります。IRkitの設定IRkitの初回起動IRkitに付属してきた説明書にすべての設定の手順が書いてあります。簡単で数分で完了します。画像つきの解説がみたい方は以下の記事を参考にすると良いと思います。http://crearc-design.com/2016/06/26/iphone-irkit/ちなみに、IRkitをAPIからコントロール連携するためにはIRkitのIPアドレスが必要になります。IRkitを設定する時にiPhone側のアプリで確認すると端末固有の名前が付いていると思います。IRkit1234.localとしてPINGを送信するとIPアドレスを知ることができます。この調べ方については以下が大変参考になります。'{"format":"raw","freq":38,"data":[123,456,789]}'肝心の赤外線のコードの取得ですが、IRkitは常に赤外線を受信していて、赤外線をIRkitに向けて送信するとIRkitのランプが点滅して受信したことがわかります。点滅したあとに下記のようなリクエストをIRkitに送ることで最後に受信した赤外線情報を取得することができます。curl"エラーで全くJSONが取得できないリクエストを送ってもエラーが出て全く取得できない現象が起きました。これはIRkitの電源を挿し直して再起動することで解決しました。それ以降は全く問題なく取得できるようになりました。これはちょっとした不具合ですね。Curlでリクエストを送るとIRKitがフリーズするCurlで新しい赤外線情報を取得しようとしたら全く反応がなくなり動作しなくなりました。再度再起動をすると初回のリモコンの赤外線受信をするようなのですが、CurlでAPIにアクセスした途端に動作しなくなります。5回ほどその現象を繰り返して諦めてリセット(検索しても方法が見つからなかったので、試しに後ろにスイッチがあったのでここを爪楊枝で押しながらmicroUSBを指してしばらく待っていたらリセットのような挙動をした)して、再度初期設定から始めたら問題なく製品が動作するようになりました。Homebridgeの設定Homebridgeをネットワーク上に立ち上げます。立ち上げるマシンですが、常に起動しているMacや余ったPCにLinuxを入れたり、RaspberryPiでも構いません。何か適当にサーバーを作ってそこで起動します。ちなみに僕はRaspberryPiを使っています。RaspberryPiのセットアップからNode.jsのインストールについてはこちらで解説したことがあるので参考にしてください。3に最新のNode.jsをインストールするNode.jsの環境を整えたらHomebridgeに必要なソフトウェアとHomebridge本体をインストールします。homebridge-irkitその後以下の場所に設定ファイルを設置します。/home/pi/.homebridge/config.jsonnameは検出された時の表示名、usernameは先程のMACアドレス、portは立ち上げておきたいポート、pinは認証時に入力させたいものを記載します。今回は設定ファイルを指定せずに一度起動した時に生成されたポート番号とPINを入れてみましたが、おそらく自分で指定できるに違いない。昔はIPアドレスを直書きしていましたが、最近はIRKit9999.localみたいに書いて動かしてます。書かないとたまにIPアドレスが変わってIRKitとの連携ができなくなってIPアドレス書き直して再起動とかしなきゃいけなくて大変です。以下のコマンドで起動することができます。homebridgeiPhoneのホームアプリからHomebridgeが検出できるようになっていると思います。先程accessoriesで指定したものがどの部屋にあるのかなどを聞かれるので質問に従って設定していけば、自然に家電をコントロールできるようになると思います。ちなみにこのままではコンソールを閉じると停止してしまいますのでforeverを使ってプロセスの永続化を行いましょう。/usr/local/bin/homebridgeforeverについては過去に詳しく解説しています。こちらのNode.jsでforeverを使ってスクリプトの起動を永続化するを参照してください。後からhomebridgeのホスト名を変更する場合HomeBridgeはavahiを使っていると思います。Piのホスト名を変更しました。した結果、~/.homebridge配下にある、config.json以外のフォルダをリネームして退避し、その後homebridgeを再起動することでiPhoneから検出できるようになりました。この時私は一度iPhoneから既存のHomeBridgeの設定を削除して新規追加しました。しないともう対応できないのかな?うまくやれば設定を引き継げそうですが、既存フォルダのファイルを一つ開いたらバイナリみたいなよくわかんないけど調べると時間かかるので辞めました。うーむ、このせいでオートメーションの複雑な設定は失われました。Piが停電等により再起動した時でも/etc/rc.localの設定で自動的にHomeBridgeを起動しようと思ったのですがroot権限で実行するとアクセサリが発見できませんでした。今思えば、おそらくHomeBridgeは~/.homebridgeを見る設定になっているので、rootでやるとrootのユーザーディレクトリを見るのかもしれない。rootのユーザーディレクトリ配下の設定ファイルを参照しながら起動したのでアクセサリが0ということになっていたのではないかと思います。rootで実行する時はrootのユーザーディレクトリにHomeBrdigeの設定ファイルを置かねば。自動起動設定だからといってrootに変更するのは少し違う気がするので、その辺は少し手心を加えて対応しようかなって思ってます。