Raspberry Pi + HomeBridgeで玄関のドアを制御する

この記事はRaspbery Pi Advent Calender 2019 6日目の記事です。

先日自宅にスマートロックを導入しました。

このスマートロックは施錠解錠をAPIで操作できるのが最大の特長です。

もともとからGoogle Homeに対応しているのですが、これだけでは楽しくないので折角なのでHomeKitへの対応をしてみようと思います。

必要なもの

次のアイテムが必ず必要です。予め準備をしてください。

  • Sesame スマートロック
  • Sesame Wi-Fiアクセスポイント
  • iOS11以上を搭載した端末
  • Raspberry Pi

今回は初代Raspberry Piを使用しています。というのも使うのはmicroUSBポートとEthernetポートなので、これでも問題ないなとなったのです。それに通常サイズのSDカードを使うので入手もしやすいですね。

もし、Apple TVかHomePodがあると外出先から操作できます。逆に言うと、これだけでは外出先から操作できません。(まあ、純正アプリで操作できるからいいんだけど)

トークンの準備

SesameをAPI経由で操作するためにトークンを取得する必要があります。Sesameのダッシュボードを開き、API設定をクリックします。

確認コードが送信される場合があるので、一度メールボックスから確認コードを入力します。エラー表示が出ても送信されている場合があります(!)

APIキーが発行されたらこれをコピーしておきます。このAPIキーが分かってしまうと、誰でも施錠解錠ができてしまうので厳重に管理してください。

ここまで来たら次はRaspberry Piでセットアップをします。

HomeBridgeのセットアップ

HomeBridgeは、AppleのHomekitを非公式に実現するためのソフトウェアです。Node.jsで書かれています。そのためまずはnpmをインストールします。

$ sudo apt-get install npm nodejs

次に、HomeBridgeをインストールします。

$ npm install -g --unsafe-perm homebridge

そして、Sesame用Homebridgeプラグインである、Homebridge-sesameをインストールします。

$ sudo npm install -g homebridge-sesame

ここまで来たら一旦HomeBridgeの設定をしましょう。設定ファイルを開きます。もし無い場合は作成してください。

$ sudo nano ./.homebridge/config.json
{
    "bridge": {
        "name": "玄関のRaspberryPi",
        "username": "01:77:AB:CD:1C:1C",
        "port": 51826,
        "pin": "092-00-123"
    },

    "description": "Room key",

    "platforms": [{
        "platform": "Sesame",
        "token": "************"
    }]
}

nameusernamepin適当で構いません。 また、MACアドレスやPINコードはそれっぽい書式にしておけばOKです。 token には先程取得したAPIキーを入れてください。

ここまで済ませたら一度Homebridgeを起動してみます。

$ homebridge

QRコードが表示されるので、iPhoneで読み取りましょう。iOSのホームアプリの「アクセサリを追加」で読み取ります。

(補足:もしQRコードが見切れて読み取れないとかいう場合は、「コードがないか、スキャンできません」からPINを入力してもOKです)

認証されていないアクセサリの警告画面が表示された場合は、「そのまま追加」をタップします。

アイコン(鍵マーク)と名前(施錠機構)は変更できるので適当な名前に変更しましょう。僕は素直に「ドア」にしました。

部屋も適当に選択しておきます。玄関にスマートロックを取り付けているので、「部屋」を新規作成して「玄関」とつけました。これによってSiriに「玄関のドアを締めて」というコマンドが使えるようになります。

デーモン化

常時起動できてないと日常生活に支障をきたすので、Homebridgeをデーモン化します。自分なりの方法をお持ちであればそれでも構いません。

僕は /etc/systemd/system/homebridge.service に次のようなファイルを作成しました。

[Unit]
Description=run homebridge
After=syslog.target network-online.target

[Service]
Type=simple
User=pi
ExecStart=/usr/local/bin/homebridge
Restart=on-failure
RestartSec=10
KillMode=process

[Install]
WantedBy=multi-user.target


有効化して起動します。

$ sudo systemctl daemon-reload
$ sudo systemctl enable homebridge
$ sudo systemctl start homebridge

systemctl status homebridge で正常に起動していたらOKですね。これで、HomeKitでスマートロックを操作できるようになりました!

ところでマシュかわいいよね。