Homebridge入門: (3) LチカするHomeKitアクセサリを作る

前回は、Raspberry Pi Zero WにhttpアクセスするとLEDが点滅するLチカサーバを作りました。iPhoneのショートカット経由でSiriからも動きました。今回は、HomebridgeをRaspberry Piにインストールして、本格的なHomeKitアクセサリとして作り直します。

Homebridgeをインストール

ということでお待たせしました、連載3回目にしてようやくHomebridgeをインストールします。HomebridgeはAppleのHomeKitのアクセサリと同じ振る舞いをするデバイスを作るための、オープンソースソフトウェアです。HomeKitアクセサリを商品化するメーカーは、Apple社からツールをもらって開発し、認証を受けて販売する必要があるらしいです。一方Homebridgeを使えば、DIYで作った自作デバイスや、HomeKit非対応のIoT製品を、HomeKitアクセサリとして使えます。自作PCや他社製PCでmacOSを動かすhackintoshに似てると思いました。

Homebridgeはnode.js上でサーバとして動きます。macOS版、Windows版、Linux版などがあり、Raspberry Pi Zero Wでも動きます。最近の紹介記事がこちらにあって、参考になりました。

Homebridgeは進歩しているようです。この記事を書いた方と同様に、昔のHomebridgeしか知らなかったので、かっこいいGUIベースの設定画面ができていてびっくりしました。この設定画面はwebページなので、Raspberry Pi OSとしてCUI画面しか表示されないLite版でも問題ありません。

まずはnpmで、homebridge本体と、設定画面UIをインストールします。

$ sudo npm install -g --unsafe-perm homebridge homebridge-config-ui-x

このあといくつか警告メッセージが出ましたが、とりあえずインストールできました。次に、Raspberry piが起動した時にhomebridgeがサーバとして自動的に起動するようにします。そのためのサービスプロバイダをインストールします。userの指定が必須のようなので、piを指定しておきます。

$ sudo hb-service install --user pi

これで準備完了です。次に、macOSマシンなどのwebブラウザから、Raspberry Pi Zero Wのアドレスを開きます。ポート番号は8581です。

http://192.168.xxx.xxx:8581

するとHomebridgeの設定ページが開きます。こんなのいつものHomebridgeじゃない、と思うくらいにかっこいいです。ユーザ名もパスワードもadminでログインできます。

ログインするとこんな感じで状況を把握できます。

次に、このサーバをiPhoneやMacで使うHomeKit環境に登録します。iPhoneのホームアプリからアクセサリを追加するメニューを選び、iPhoneのカメラでQRコード部分を読み込めば、登録完了です。ちなみに、今のバージョンのmacOS版ホーム.appには、アクセサリを追加する機能は無いようです。

プラグインを追加する

Homebridgeサーバは、このままでは何もしてくれないので、機器をコントロールするプラグインを追加します。初期状態で、webページのプラグインタブを選択すると以下のようになります。Homebridge UIというのはこのwebページを表示してくれているプラグインのようです。

「インストールするプラグインを検索…」のところにキーワードを入れると、候補のプラグインが出てきます。プラグインは、もちろんゼロから自作することも可能です。でも多数のプラグインが用意されているので、それから探すか、それを元に改造するのが良いと思います。以下に一覧があります。2700以上登録されてます。

プラグインは、特定のServiceにカテゴリ分けされています。Serviceには、スイッチ、ドア、ファン、電球、カメラなどがあります。ServiceごとにCharacteristicsという項目が用意されています。Characteristicsには、名前、On、方向などがあり、これらの組み合わせで、「(名前)をonにする」「(名前)を消す」などの言葉に反応します。

Lチカサーバに適したプラグインは、スイッチ系のものだと当たりをつけました。switchというキーワードで検索すると、以下のようなものが出ます。

中でもhttp-switchというのが使えそうです。他にもhttp-switch-unlimitedとかhttp-simple-switchとか色々な候補があります。いずれもhttpアクセスでスイッチを入れるプラグインのようで、今回の目的に合っているようです。http-switchは、利用者も多いようでしたし、直近でアップデートもされているので、これを選びました。

他にもshell-switchというのもあり、こちらはシェルコマンドでスイッチを入れられるようです。もしかしたらshell-switchを使えば、Lチカする機能をhttpサーバとして実装しなくてもよかったかもしれません。ただ、多くのプラグインは、httpアクセスで機器をコントロールするよう書かれてます。なので、今回のようにhttpアクセスで制御するように構成しておいた方が、プラグインの選択肢は多いです。

http-switchの説明ページを見ると、Lチカサーバは、「スイッチをonにすると、一瞬onになり、すぐにoffに戻る」方式の、ステートレスのスイッチとして登録すれば良いようです。

ということでHomebridgeのプラグインページでもhttp-switchを検索して、インストールします。

次に、「設定」を押してアクセサリとして追加します。ステートレスのスイッチを構成するための例を見て、必要な項目を用意しました。

名前はSiriでお願いするときの名前になります。switchTypeはstatelessです。onUrlのところに、Lチカを起動するURLを書いておきます。Lチカサーバーが1秒間LEDを点灯させるURLを書いておきました。

ホーム.appから動作確認

ここまで準備して、Homebridgeを再起動してしばらく待つと、iPhoneやmacOSのホーム.appにLEDという名前のスイッチが現れます。以下はmacOSのホーム.appの画面のアクセサリの項目です。ここでLEDをクリックすると、画面表示が一瞬オンになり、またオフに戻ります。それと同時にRaspberry PiのLEDが1秒間点灯しました!

iPhone, Apple Watch, HomePod, macOSのSiriにお願いして「Hey Siri, LEDをつけて」とか「オンにして」などと発話しても、同様にLEDが点灯します。ただ、macOS (Z390マザーボード上のmacOS 11.2) のSiriだけは、一応ちゃんとLEDが点灯するにもかかわらず、申し訳なさそうな返事をします。

最初は、Homebridgeだから何か不都合があったのかとか、プラグインの設定が不十分なのかと思いました。でも、Amazonで売っていたMoross社のHomeKit対応スマートプラグ製品(技適もPSEも付いてます)、

で試したところ、こちらも正しく機能するものの、申し訳なさそうな応答は同じでした。MacBook AirのSiriにお願いしても同じ応答でした。

ちゃんとした製品の組み合わせでも同じ反応なので、おそらくはmacOS版Siriの不具合なのだと思われます。そのうち改善されることでしょう。

まとめ

Raspberry Pi Zero Wを使って、SiriからLチカするHomeKitアクセサリを作りました。音声でもコントロールでき、安定して動いています。次回はこれでmacOSマシンの電源を投入できるようにしたいと計画してます。