こんにちは。Tedです。
AppleのHomeKit対応製品は海外では充実していますが、日本ではまだまだ。そのために選択肢が少なく高価なのがネックです。
そこで今回はHomebridge + ラズパイを使って安価にHomeKitに対応した見守りカメラを作ってみました。
Homebridgeとは
HomebridgeはNodeJSを使ったHomeKitのエミュレーションを行うシステムです。オープンソースとして公開されています。
用意するもの
- ラズパイ(今回は Raspberry Pi 4B を使いました)
- ラズパイ対応カメラ
- 32GB マイクロSDカード
- ラズパイ電源アダプタ
- Pi4B用ラズパイケース(カメラを内蔵できるものを選びました)
他には環境を構築するためにMacBook Proおよびインターネット接続環境・有線LANケーブル・マイクロSDカードアダプタを用意しました。
「作ろう会」で作りました
今回は下記の作ろう会にて作成してみました。
masm11さん(当社シニアエンジニア)と植田雄太さんから助言をいただきながら進めました。
システム構築
ラズパイを使ってHomeKitカメラを作った記事はいくつかWeb上に上がっています。 たとえば下記がそうです。
このAppleInsiderの記事では構築済のシステムバイナリが提供されていますが、ラズパイ4では動きません。 そこで今回はバイナリを使わずシステムを構築していきます。
ラズパイを起動できるようにする
まずはラズパイを起動できるようにします。 今回は直付けのモニタ・キーボードは用意せずに構築していきます。
SDカードにRasbianを書き込む
下記のRasbianダウンロードサイトよりRasbianシステムをダウンロードします。 今回は Raspbian Buster with desktop and recommended software を使いました。
ダウンロードしたZipアーカイブは解凍しておきます。
SDカードへの書き込みはMacにてターミナルを開いて下記のように進めます。
[~]$ diskutil list #マイクロSDカードのアイデンティファイヤを調べておく #ここではマイクロSDカードのアイデンティファイヤは /dev/disk1 と記述します。 [~]$ diskutil unmountDisk /dev/disk1 #いったんアンマウント [~]$ diskutil eraseDisk MS-DOS BOOT /dev/disk1 #フォーマット [~]$ diskutil unmountDisk /dev/disk1 #フォーマット後自動的にマウントされるので再度アンマウント [~]$ sudo dd if=/ファイルパス/ダウンロードしたファイル.img of=/dev/rdisk1 bs=1m #SDカードにイメージを書き込み
LANからラズパイにアクセスできるようにする
[~]$ diskutil mountDisk /dev/disk1 #書き込んだSDカードをマウント [~]$ cd /Volumes/boot #SDカードに移動 [~]$ touch ssh #sshファイルを作成
ラズパイに周辺機器を取り付ける
ラズパイにカメラを取り付ける
写真のようにラズパイにカメラケーブルを取り付けます。
向きを間違えないように、またしっかりとセットしてください。(見た目にはちゃんとケーブルがセットされているようでも微妙なズレで認識されなかったりします)
その他周辺を接続
バイナリを書き込んだマイクロSDカード、LANケーブルおよび電源をラズパイ本体に接続します。 ラズパイをケースに入れるのは基本的な動作確認ができてからとしました。
いよいよラズパイを起動
電源を入れると、本体の赤LEDが点灯し緑のアクセスLEDが点滅します。 10秒ほど待てばシステム起動となり、ラズパイにアクセスできるようになります。
ラズパイにSSH経由でアクセス
[~]$ ssh pi@raspberrypi.local # 初期パスワードは raspberry (当然ながら変更しておく)
無線LANでアクセスできるようにする
上記の通りラズパイにアクセスしたら、無線LANに接続できるようにしておきます。
pi@raspberrypi:~ $ sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
下記を記述します。
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 country=JP network={ ssid="<接続したいSSID>" psk="<WEPキー>" }
ここまでできれば一段落です。 後はラズパイにシステムを構築していきます。
ラズパイシステムを最新の状態にアップデート
pi@raspberrypi:~ $ sudo apt-get update && sudo apt-get upgrade
カメラモジュールを有効化
pi@raspberrypi:~ $ sudo raspi-config
タイムゾーンの設定
前記 raspi-config から適切にタイムゾーンを設定しておきます。
設定場所は [4 Localisation Options] - [I2 Change Timezone] にあります。 日本だと [Asia] - [Tokyo] ですね。
Node.jsをインストール
HomebridgeはNode v4.3.2またはそれ以降のバージョンが必要です。 今回は執筆時の最新版である version 10.x を使いました。
https://linuxize.com/post/how-to-install-node-js-on-raspberry-pi/ を参考にしました。
pi@raspberrypi:~ $ curl -sL https://deb.nodesource.com/setup_10.x | sudo bash - #最新版をget pi@raspberrypi:~ $ sudo apt-get install -y nodejs #インストール pi@raspberrypi:~ $ node --version #インストールされたバージョンを確認 v10.15.2 #などと表示されればOK
Homebridgeをインストール
pi@raspberrypi:~ $ sudo npm install -g --unsafe-perm homebridge
Homebridge用カメラプラグインをインストール
pi@raspberrypi:~ $ sudo npm install -g homebridge-camera-rpi@latest
Homebridgeの設定ファイルを編集
pi@raspberrypi:~ $ mkdir .homebridge #最初にディレクトリを作成 pi@raspberrypi:~ $ vi .homebridge/config.json
ファイル内に下記を記述します。
{ "bridge": { "name": "Homebridge", #名称を設定 "username": "1A:2B:3C:4D:5E:6F", #16進数で自由に設定(重複しないようMACアドレス推奨) "port": 46183, "pin": "111-22-333" #自由に設定 }, "description": "HomeCamera", #名称を設定 "platforms": [ { "platform" : "rpi-camera", "cameras": [{ "name": "Home Camera", #名称を設定(Homeアプリでのデバイス名) "rotate": 90 #0-180の回転角度 }] } ] }
(※2020-1-11 修正: platforms内のplatformの名称はプラグイン固有なのでその旨修正)
あとは、ラズパイ起動時に必要なモジュールが自動的にスタートするようにしておきます。 これは動作確認が終わってからでもよいでしょう。
自動起動の設定
pi@raspberrypi:~ $ sudo vi /etc/rc.local
ファイル内に下記を追加します。 スクリプト後半、exit 0 の前あたりに書きました。
/usr/bin/homebridge -U /home/pi/.homebridge/ &
(※2020-2-16 修正: homebridgeが格納されているディレクトリを修正)
Homeアプリにカメラを登録
前提としてすでにHomeKitホームハブ(HomePod, Apple TVなど)が稼働していることとします。
HomePod、Apple TV、iPad をホームハブとして設定する - Apple サポート
前記ホームハブと同じネットワークセグメントに接続されているデバイス(iPhoneなど)にてHomeアプリを起動します。
Homeアプリにて [+] をタップしてデバイスを追加します。
[アクセサリを追加] をタップします。
[コードがないか、スキャンできません] をタップします。
設定したカメラデバイスが表示されるのでタップします。
[このまま追加] をタップし、その後表示される画面にてconfig.jsonにて設定したpinを入力します。
以上にてカメラデバイスが追加されます。
正しく動作すれば図のようにカメラ画像がHomeアプリから確認できるようになります。
うまく動かない場合は
カメラが正しく動いているか
pi@raspberrypi:~ $ vcgencmd get_camera #カメラの状態を取得 supported=1 detected=1 #このように表示されていれば正しく認識されている
上記のように返らない場合はカメラケーブルの接続状態を確認しましょう。
カメラ画像が取得できるか
pi@raspberrypi:~ $ raspistill -o pictureFromCamera.jpg
取得した画像は sftp などで取得・確認します。
Homebridgeは正しく起動しているか
Homeアプリからデバイスが見えない場合、Homebridgeが正しく稼働していない可能性が高いです。
pi@raspberrypi:~ $ ps -aux | grep homebridge #homebridgeプロセスが正しく起動しているか確認 root 432 0.2 1.8 181880 72148 ? Sl Dec18 36:25 homebridge #このような表示があればプロセスは存在している
プロセスは起動しているが動作がおかしい場合はデバッグモードでエラーが起こっていないか確認しましょう。
pi@raspberrypi:~ $ sudo kill <killしたいPID(上記の場合は432)> #いったんHomebridgeプロセスを終了 pi@raspberrypi:~ $ DEBUG=* homebridge -D #デバッグモードで起動
Homebridgeの設定ファイルに誤りはないか
config.json ファイルを JSON Lint などのJSONバリデータにて確認しましょう。
突然Homeアプリからデバイスが見えなくなった
システムの設定時など、何度か再起動を繰り返していると突然Homeアプリからデバイスが見えなくなることがあります。
この場合は下記のようにペアリングをリセットすると見えるようになります。
- HomeアプリからHomebridgeアプリをすべて削除する。
- persist および accessories フォルダを削除する。
pi@raspberrypi:~ $ sudo rm -rf .homebridge/persist pi@raspberrypi:~ $ sudo rm -rf .homebridge/accessories
- config.json 内の username を(インクリするなど)別のものに変える。
上記を行った後、システムを再起動します。
それでもうまくいかない場合
下記リンクに沿って調べてみてください。