MUDAなことをしよう。MUDAなことをしよう。PiをHomeKit機器として認識させるための作業になります。(2016)があってSiriのサードパーティ開放の話が出たりしたみたいですが、この工作では別にiOSアプリとかを作るわけではないので、全然関係ありません。ミドルウェアの設定をしていきます。ベースにさせていただくのは以下の記事です。Piこのあたりを見比べながら進めていきたいと思います。Piのベースのアップデートをしておきます。upgrade続いて、Node.jsのインストールです。B向けの操作をそのまま実行していきます。-v2.14.2それから、avahi絡みのライブラリをインストールします。libavahi-compat-libdnssd-devこれで前準備は完了。Homebridgeの導入です。homebridgeまずこれでHomebridge本体のインストールは完了。続いて、HTTPリクエストを投げてくれるプラグインを突っ込みます。homebridge-readablehttpこれで必要なものは全て揃ったはず。51826.なんか登録用の数字が表示されているので、おそらく動作自体はOKでしょう。APIを叩いてくれるように設定していけばよさそうです。設定ファイルはホームディレクトリ直下の”.homebridge”の直下に、”config.json”の名前で作ります。自分の場合は”/home/pi/.homebridge/config.json”。作成場所はおそらくプラグインに依らず共通です。自分はこんな感じで設定ファイルを作ってみました。]}“bridge”の所はどのプラグインを使っても共通で設定する項目です。Piを探して登録することになるのですが、ここの”name”で設定した値で発見されることになります。PiのMACアドレスにしています(上のは実際とちょっと変えてます)。”port”はいじらずで、”pin”はこの形式で好きな数字を入れます。あとでペアリングに使います。“description”はサンプルそのままです。“accessories”からはプラグインごとに設定項目が変わります。最初はhomebridge-readablehttpのsample-config.jsonだけ見て設定しようとしたのですが、どういうプロパティがあってどのプロパティを設定すれば良いのかよくわからなくて、結局ソースも見ることになってしまいました。その結果、今回の自分の実装には関係なさそうなプロパティでもとりあえず何かしら値を入れとかなきゃいけないっぽかったので、そういうものについては空文字に設定しています。APIのURLを記入します。今回はシンプルにGETメソッドで動くようにしているので、”http_method”もそれに合わせて”GET”にしています。見た感じ、”POST”もいけそうですね。これで設定ファイルの準備はOKです。homebridgeを起動させます。51826.アクセサリとして「でんき」が登録されて、PIN番号も変更したものに変わっています。Pi本体の方の設定は終了で、ここからはiOSアプリの方の設定です。HomeKitに対応したアプリが必要なので、とりあえずInsteon+というアプリを落としてきます。初回登録が済んだらこの画面になるので、”Home”をタッチ。右上の”+”をタッチ。Device”をタッチ。HomeKit対応機器を探し始めます。Piが同じローカルネットに接続されていれば、先ほどconfig.jsonのbridge.nameに記載したデバイスが見つかるハズ。自作ゆえに当然なので、”このまま追加”をタッチ。“コードを手動で入力”をタッチして、先ほど自分で設定したPINを入力すれば登録完了です。Device”があり、さらにそれをタッチすると...おお、ちゃんと「でんき」が登録されています!ではいよいよ、Siriに話しかけてみます。成功!つけるのもバッチリ。Siri!」が気だるい感じになっているのは、普段自分が寝る前のテンションに反応してくれるように認識を調整していて、それに合わせるように喋っているからです。それ以外の言葉もなんだかモゴモゴしていますが、それでもSiriは正確に認識してくれます。電球だけでもこんなに色々あります。こんな感じに変えてみました。CONTROL”を変更すれば、Siriに認識させる呼び名も変えられるようです。別の家電制御設定というのもできるようになっています。Scene”をタッチ。すると、デフォルトで用意されているシーン名が出てきます。ここでは”おやすみ”を設定したいと思います。Scene”をタッチ。「でんき」が追加されているので、これをタッチすると、どの動作にするかの選択になるので、”OFF”を選びます。Siriに話しかけてみます。「おやすみ!」すると、まず通常のSiriの通常の応答が優先されますが、その下に”おやすみシーン”が表示されます。これをタッチすると、という返事があり、部屋の電気を消してくれました。「おやすみ!」の一発で電気を消してくれたら嬉しかったのですが、これはまあしょうがないですね。ダイレクトに「でんき消して」と言えば済みますし。期待通りのものができたので満足しているのですが、最後の仕上げが残っています。Piが再起動した時に、自動的にHomebridgeが起動するようにしておきたいと思います。こちらを見るとやり方が2つ(init.dを使うものとsystemdを使うもの)があるようなのですが、どっちにしろよくわからないので、ここでは後者のやり方で試したいと思います。後者の詳しいやり方は以下に記載されているので、多少コマンドを補いながら試していきます。/var/homebridgeここまで設定したら、以下の内容で二つのファイルを作成します。$HOMEBRIDGE_OPTSRestart=on-failureRestartSec=10KillMode=process[Install]WantedBy=multi-user.targetできたら、以下を実行します。そのあと、再度ログインしてから、以下のコマンドで状態を確認します。51826.上記のように表示されていればOKです。$HOMEBRIDGE_OPTSの部分をチェックしてみてください。本家のスクリプトと少しだけパスが違います。Piを見つけてくれなくなってしまいました。しょうがないので一度デバイス登録を削除したりアプリを再インストールしてもう一度登録し直して事なきを得ましたが、この辺りの挙動はまだよくわかりません。当初の目標は達成できました。Siriというか、音声の認識をミスることがほとんどないので、すこぶる快適に音声制御できます。Webサーバにリクエストを投げる形でしたが、とりあえずGETかPOSTで制御できるものならなんでも操作できそうです。この音声制御、自分としてはなかなか満足いくものになったので、奥様に「これどうよ?」と感想を聞いたら、「あってもなくてもいい」という実に素直な返事が返ってきました。うーん、まあ、そうかもしれません。言ってしまえば、リモコンでON/OFFする手間を省いているだけなので。いえ、この仕組みを作って以来、私自身は自分の部屋の中で1回もリモコンを触らなくなったので、作者本人としては結構便利に使っていたりします。AM大変参考になりました。PMころり様ご覧いただきありがとうございます。お役に立てたのなら幸いでございます。ご相談いただいた件について、ちょっと考えてみました。実はこの記事を書いてからこのへんのシステムには全く触っていないので、できるかどうかわからない、ジャストアイデアレベルですが。Pi上で動いているサーバプログラム(前編参照)にHTTPリクエストが投げられ、最終的にサーバプログラムが赤外線信号を一発送信するようになっています。結局のところ、「一つの認識結果に対して赤外線信号を何発送信するか」を決めているのはサーバプログラムで、特に一発しか赤外線信号を送信してはならないというルールはないハズですので、サーバプログラムの中の一つのroute(HTTPリクエスト)処理の中で、「信号1送信」→sleep→「信号2送信」という処理を書いてみるというのはいかがでしょうか。時間が経過していて、かつ、私自身の環境で検証したわけではないので、的外れなことを言ってしまっていたら申し訳ありません。PM記事拝見しました!おもしろいです!自分でもいろいろやってみたいとおもって、質問いたします。お返事が遅くなってしまい大変申し訳ありません。基本的に週末しか趣味の時間がとれないもので。自動で判断するのでしょうか?私もhomebridgeとプラグイン(readablehttp)の仕様をちゃんと理解しているわけではないのですが、上記の理解で合っていると思います。正確には、「○○をつけて」で”on_url”、「○○を消して」で”off_url”が実行されることになります。なると、ご指摘のとおり、「○○を上げて」とか「○○を下げて」に対応するURLを指定することができません。その前に、「○○を上げて」とか「○○を下げて」をSiriが認識してくれるかどうかから調査が必要ですが。他のhomebridgeユーザのブログを見てても、やっぱりみんなON/OFF制御しかしていないように見えます。”readablehttp”以外で、別の言葉にも対応できるプラグインがあれば良いのですが。すみません、私は把握できておりません。MUDAなことをしよう。前回までで、Siriによる家電制御の自作は無事完了しました。コメントをキャンセルメールアドレスが公開されることはありません。hidaka_hirojiAmazonほしいものリストこちら自身の工作用に使いたいものがメインですが、必ずしも工作に使うわけではないのでご了承ください。MUDAなことをしよう。