「Hey, Siri」でmomoを起動し、外から自宅の様子を見れるようにした話
やりたいこと
iPhoneに「Hey Siri, 家の様子を見せて」のように呼びかけると、Safariで家の様子(ペットや、子供の様子など)見れるようにしよう、というのが今回の狙いです。そのために次のアプリやサービスを利用します。
- Raspberry Pi (Zero, 3, 4 など)
- WebRTC Native Cleint Momo
- Sora Labo
- HomeKit
- Homebrige
全体図はこちらです。
WebRTC Native Client Momo とは
WebRTC Native Client Momoとは、時雨堂が公開している、WebRTCを使えるネイティブクライアントアプリです。
Webブラウザで利用することが多いWebRTCを、ネイティブアプリとして利用できるようにしたオープンソースソフトウェアです。
映像、音声の送信だけでなく、受信にも対応しています。単独で使ったり、同じく時雨堂が提供しているサーバーと連携して利用できます。
複数のプラットフォームをサポートしていますが、Raspberry PiやJetsonシリーズなど、小さなコンピューターの性能を使い切ってくれるところが非常に魅力的です。
Sora Labo とは
同じく時雨堂が開発しているWebRTC SFU Soraを試すことができるサービスです。検証用途なら無料で利用できます。(法人の場合は検証用途でも申請が必要です)
- Sora labo ... https://sora-labo.shiguredo.jp
- Sora Labo ドキュメント ... https://github.com/shiguredo/sora-labo-doc
HomeKitを使うには
HomeKitはAppleの提供するスマートホーム用のサービスで、インターネット経由でも利用できます。HomeKitを利用するには、家のネットワークに中心となる「ホームハブ」を設置する必要があります。2020年12月現在、「ホームハブ」として利用できるのは次の3つです。
- AppleTV(第3世代以降)
- iPad
- HomePod / HomePod mini
AppleTVを持っている人は、それを利用するのがスムーズです。私はiPadで利用してますが、安定して利用するには常時ACアダプターにつないでおく必要があります。ホームハブの設定については省略します。公式ページなどを参考にしてください。
Homebridgeとは
Appleのスマートホーム向けの仕組みであるHomeKitに、対応デバイス以外をつなぐことができるソフトウェアです。npmで対応するプラグインを探すことができます。
- サイト https://homebridge.io/
- GitHub https://github.com/homebridge/homebridge
- 対応プラグイン https://www.npmjs.com/search?q=keywords:homebridge-plugin
こちらも色々なプラットフォームで動作しますが、スマートホームと言ったらRaspberry Piで動かしたくなります。
Raspberry piにmomoをインストール
今回はRaspberry Pi 4にセットアップしました。
ダウンロード
こちらの手順にしたがってモジュールをダウンロード、解凍します。
また未インストールであれば、libnspr4, libnss3といった関連するライブラリもインストールしてください。
テストモードでの確認
USBカメラまたはRaspberry Piのカメラモジュールを接続し、こちらの手順にしたがってテストモードで起動します。
./momo --no-audio-device test
この時、カレントディレクトリに解凍してできたhtmlフォルダーが必要です。
momoが起動したら、ブラウザーで http://RaspberryPiのIPアドレス:8080/html/test.html にアクセスします。[Connect]ボタンをクリックして、カメラの映像が表示されることを確認しましょう。
Soraモードでの利用
momoの映像配信をインターネット経由で見たいので、サーバー連携させます。連携には次の2種類が選べます。
- Ayameモード ... WebRTCシグナリングサービスAyame Liteと連携
- Soraモード ... 製品のSoraか、WebRTC SFU Sora検証サービスのSora Laboと連携
今回はSora Laboを使わせていただきました。GitHubアカウントでサインインして「シグナリングキー」を取得しておきます。
- Sora Labo ドキュメント https://github.com/shiguredo/sora-labo-doc
検証目的では無料で利用できますが、条件があるので確認しておきましょう。
- 商用目的での利用できません
- Sora Labo は検証目的以外では利用できません
- 法人や個人事業主での利用は申請が必須です
などなど。
Soraモードでのmomoからの映像配信は次のように行います。
./momo --no-audio-device sora wss://sora-labo.shiguredo.jp/signaling githubのID@ルーム名 \
--auto --audio false --video true --video-codec-type H264 --video-bit-rate 800 \
--role sendonly --metadata '{"signaling_key": "取得したシグナリングキー"}'
ブラウザでの受信は、Sora Laboのダッシュボードから、「シングルストリーム受信」のサンプルを開き、ルーム名を指定してビデオコーデック「H264」を選んで接続、映像が受信できることを確認してください。
あるいは、私が用意したこちらのサンプルでも接続できます。
※長時間の接続はできませんので、momoおよびブラウザは確認が終わったら終了させてください。
momoの起動スクリプトの用意
後で利用するため、次の様にシェルスクリプト(sora.sh)を用意しておきます。今回は momo のバイナリを /home/pi/momo/ にインストールした場合を例にしています。自分の環境に合わせて、momoのバイナリをフルパスで指定してください。
#!/bin/sh
nohup /home/pi/momo/momo --no-audio-device \
sora wss://sora-labo.shiguredo.jp/signaling githubのID@ルーム名 --auto \
--audio false --video true --video-codec-type H264 --video-bit-rate 800 \
--role sendonly --metadata '{"signaling_key": "取得したシグナリングキー"}' &
またシェルスクリプトには次の様に実行権限をつけておきます。
$ chmod +x sora.sh
Raspberry PiにHomebrigeをインストール
こちらの記事を参考に、Raspberry Pi 4にHomebridgeをインストールしました。
Homebridge本体
私の環境では、Node.jsやavahiはインストール済だったので、Homebridgeのインストールから実施します。また今回はグローバルではなく、ユーザー(ここではpiユーザー)のホームディレクトリ下にインストールしました。
$ cd
$ mkdir homebridge
$ cd homebridge
$ npm install homebridge
warningが出ますが、ひとまずインストールはできたようです。
$ npx homebridge
として起動されることを確認します。
プラグイン
Homebridgeはいろいろのなプラグインを利用できるのが魅力です。
今回はこちらのプラグインを利用します。
-
homebridge-cmdswitch2
- オン / オフ / 状態取得 をサポートするプラグイン
$ npm install homebridge-cmdswitch2
Homebridgeの指定
Homebridgeをインストールすると、 ~/.homebridge ディレクトリができているはずです。そこに設定ファイルを作成します。
$ cd ~/.homebridge/
$ vi config.json
config.jsonの内容は次の様になります。 platforms の部分か今回設定する箇所です。
{
"bridge": {
"name": "Homebridge",
"username": "xx:xx:xx:xx:xx:xx",
"port": 51826,
"pin": "xxx-xx-xxx"
},
"description": "raspberry4",
"accessories": [],
"platforms": [{
"platform": "cmdSwitch2",
"name": "MultiSwitch",
"switches": [{
"name" : "momo",
"on_cmd": "/home/pi/momo/sora.sh",
"off_cmd": "killall momo",
"state_cmd": "ps h -C momo",
"polling": true,
"interval": 5
}]
}]
- on_cmd ... オンにする際に実行するコマンド
- 用意したシェルスクリプト(sora.sh)を絶対パスで指定します(パスは環境に合わせて修正してください)
- off_cmd ... オフにする際に実行するコマンド
- プロセス名前を指定してkillする、簡易的な対応
- state_cmd ... 状態取得のためのコマンド
- ps でプロセス名を探すことで、簡易的に実現
起動の確認
Homebridgeをインストールしたディレクトリに移動し、次の様に起動します。
$ npx homebridge
iPhoneやMacの「ホーム」アプリに、momoが表示されればOKです。タップしてオン/オフが切り替わることを確認してください。
同時に、次のことも確認します。
- Raspberry Piで、momoのプロセスが起動/終了すること
- Sora Laboを通して、映像が配信されてブラウザで見れること
- Sora Laboのダッシュボード https://sora-labo.shiguredo.jp/dashboard
- 私のサンプル https://mganeko.github.io/react_ts_recvonly/
Homebridgeの自動起動
ここまで準備ができたら、こちらの記事を参考にsystemdを使ってHomebridgeを自動起動させます。
関連ファイルの用意
下記はpiユーザーのホームディレクトリに設定ファイルを置いた場合の例です。実際の環境に合わせて設定してください。
# Defaults / Configuration options for homebridge
# The following settings tells homebridge where to find the config.json file and where to persist the data (i.e. pairing and others)
HOMEBRIDGE_OPTS=-U /home/pi/.homebridge
[Unit]
Description=Node.js HomeKit Server
After=syslog.target network-online.target
[Service]
Type=simple
#User=homebridge
User=root
EnvironmentFile=/etc/default/homebridge
# Adapt this to your specific setup (could be /usr/bin/homebridge)
# See comments below for more information
#ExecStart=/usr/local/bin/homebridge $HOMEBRIDGE_OPTS
ExecStart=/home/pi/homebridge/node_modules/homebridge/bin/homebridge $HOMEBRIDGE_OPTS
Restart=on-failure
RestartSec=10
KillMode=process
[Install]
WantedBy=multi-user.target
今回はhomebridgeをグローバルにインストールぜすに、piユーザーのホームの下にインストールしているため、それに合わせた設定にしています。実際の環境に合わせて適宜記述してください。
またユーザーは手を抜いてrootで起動していますが、適宜実行用のユーザーを作って、その権限で起動してください。
サービスの登録
$ sudo systemctl daemon-reload
$ sudo systemctl enable homebridge
$ sudo systemctl start homebridge
これでhomebridgeが自動起動するようになりました。リブートして確かめてください。
Siriとの連携
最後は、iPhoneのSiriを使ってmomoの起動ができるようにします。
ショートカットアプリへの登録
iPhoneに「ショートカット」アプリがあるので、それを利用します。使い方は公式サイトを参考にしてください。
参考までに、私が用意したショートカットの内容はこちらです。
- 発音しやすい名前を指定 ...「モモを見る]
- ホームアプリで、"マイホーム"をコントロール
- momoを「オン」にする
- Safariで、サンプルページを開く
同様に、たとえば「モモを消す」ショートカットも作成し、momoをオフにします。
ショートカットの実行
ショートカットアプリを開いて「モモを見る」をタップすると、次の2つが実行されます。
- ホームアプリを使って、momoをオンに
- Safariで配信を見るためのページをオープン
あとはSafariで[connect]ボタンをタップすれば、どこからでもmomoの映像を見ることができます。
Siriで起動
作成したショートカットは次の様にSiriを使って呼び出すことが可能です。
- 「Hey Siri, モモを見る]
- 「Hey Siri, モモを消す」
まとめ
momo, Sora Labo, HomeKit + Homebridge, Siri + ショートカットアプリ、を組みあわせることでiPhoneから自分の家の様子を見ることができるようになりました。残念ながら外出する機会自体が減っている今日この頃ですが、何かの参考になれば嬉しいです。
Discussion