Python
RaspberryPi
Slack
slackbot

ラズパイでスマートロックを作る話(Siriで操作できるまで)

前書き

もうすでにいろんな人に作られていますが、自分も欲しかったので作って見ました。
色々機能つけてみたので長くなりました。目次で必要な部分だけ見て頂けるとありがたいです。
ソースコードはわかりやすくするため、独立したファイルで書き直して全てGithubに公開してます。

1. 機能説明

  1. 物理ボタンで鍵を操作できます
  2. どこからでも鍵を操作できます(slcakbot)
  3. Siriで操作できます(homebridge)
  4. 人間を感知して天気情報を更新できます
  5. 定期的に撮影をしてくれて監視できます
  6. 顔認識できます?(追加予定(野望))

1.1 デモ

ezgif-2-1cdcf6e3fe.gif
SiriとSlackで操作する部分のみアップしてます。

2.環境説明

2.1 使用部品

  1. ラズパイ
  2. 抵抗:可変抵抗 1個
  3. サーボモーター:MG996R 1個
  4. 人体センサー:HC-SR501 1個
  5. 液晶ディスプレイ:1602A
  6. スイッチ:タクトスイッチ 1個
  7. カメラモジュール

2.2 環境(手元パソコン)

  • macOS High Sierra 10.13.4
  • VNC Viewer(GUIで操作するため)

2.3 環境(ラズパイ)

  • OS: Raspbian
  • 言語: Python
  • その他: Slackbot, homebridge, cron

3. 実装説明(部品編)

3.1 サーボモーター[コード]

サーボモーターを使用するにはデューティ比について理解する必要があり、詳しくはWikiまで。

3.2 人体センサー[コード]

人体センサーは固体差すごいので、作動するたび間隔をあえて開けることお勧めします。

3.3 タクトSWの使い方

特に説明必要ないと思いますが、抵抗をつけることを忘れないようにしましょう。

3.4 ディスプレイの使い方[コード]

環境構築

git clone https://github.com/adafruit/Adafruit_Python_CharLCD.git
cd Adafruit_Python_CharLCD
sudo python3 setup.py install

今回使用するLCDは32個の英数字しか表示できないのであまり情報表示できません。

3.5 カメラモジュールの使い方[コード]

カメラのセットアップはこちらの記事をご覧ください。
監視カメラとして使用したいので、撮影時刻をファイル名で保存しています。

4. 実装説明(機能実現編)

4.1 物理ボタンで鍵を操作する

鍵の開け閉めを関数で定義し、スイッチが押されてから鍵の現在状態を確認してから操作しています。

4.2 どこからでも鍵を操作する(slcakbot)[コード]

今回はSlackbotを利用してインターネットさえ繋がれば鍵を操作できるようにしてます。
Slackbotの飼い方はこちらの記事すごいわかりやすいのでお勧めです。
補足として、Slcakbotの最終的なディレクトリ構造は以下のようになります。

     slackbot
       ├ run.py
       ├ slackbot_settings.py
       └ plugins
           ├ __init__.py
           └ SlackLock.py

4.3 Siriで鍵を操作する(homebridge)[コード]

環境構築

sudo apt-get install nodejs npm
npm cache clean
sudo npm install n -g
sudo apt-get install libavahi-compat-libdnssd-dev screen
sudo npm install -g homebridge
sudo npm install homebridge-cmd -g

homebridgeを利用して、SiriにHomeKit対応してる製品と認識させる。
設定ファイルに必要な情報を入力する必要あるので、好きなエディターで編集してください。

vim /home/pi/.homebridge/config.json

以下のように自分の環境に合わせて書き込みください。

{
“bridge”: {
“name”: “HBliv“,
“username”: “AA:AA:AA:AA:AA:AA“, #ここにラズパイのMacアドレス(ifconfigで確認できます)
“port”: 51821,
“pin”: “123-45-432” #ここ接続時に使用するので覚えてください。
},
“description”: “Living room“,
“platforms”: [],
“accessories”: [
{
“accessory”: “CMD”,
“name”: “ロック”, #ここにつけたい名前を入れてください
“on_cmd”: “python ~/siriopen.py“,  #オンの際の実行文
“off_cmd”: “python ~/siricloes.py“, #オフの際の実行文
}
]
}

これでhomebridgeを実行します。

homebridge

ここからApple製品の設定です。
自分のSiri対応機器でホームを開いて、右上のを押してからアクセサリーを追加します。
そこでhomebridgeというものが感知されましたら選択してください。
画面が変わりましたらコードを手動で入力を押してください。
先ほど設定ファイルに書き込んどPINコードをここで入力します。
以上で設定は終わります。

ちなみに、ライトとして認識されているので、ライトつけてとライトけしてのようにロックつけてとロックけしてで話かけてあげる必要があります。

4.4 人間を感知して天気情報を更新する[コード]

環境構築

pip3 install --upgrade pip
pip3 install slackbot
pip3 install beautifulsoup4

キーの取得などなしで、リクエストするだけで天気情報を簡単に手に入れるので、livedoorをお勧めします。

4.5 定期的に撮影をしてくれて監視する[コード]

cronという元々搭載されている定期的に命令を実行してくれる機能を利用しました。
まずは、これでcronの設定を開きます。

sudo crontab -e

末尾にこれを付け加えると10秒ごとに撮影プログラムが実行されます。

* * * * * for i in `seq 0 10 59`;do (sleep ${i}; python ~/DoorCamera.py ) & done;

5. 最後に

デモでわかるように、モーターを鍵に取り付けることがすごく大変でした。
ラズパイの設定とプログラム書くなど合計で5時間前後でしたが、鍵に取り付けることは1週間ほどかかりました。
結論:3Dプリンター欲しいです。

6. 参考文献

Hey Siri ラズパイのLEDをつけて
PythonとBeautiful Soupでスクレイピング
第43回「Raspberry Pi Zero V1.3+カメラモジュールでミニ定点カメラを作ろう!
ラズパイとSuicaで玄関を開ける
Raspberry Piでスマートロックをつくった
基于树莓派的人脸认证门禁
夏だ!人感センサーを使って蝉を鳴かせよう
人感センサー(HC-SR501)とRaspberry Piをつないでみる
python 現在時刻取得
homebridgeでsiriから家電コントロール
自作のコマンドを作成した
Raspberry Pi 3でネットワーク ライブカメラを構築する方法 Motion編
ラズベリーパイを利用したHomeKitとSiriによる家電操作
お天気情報をAPI経由で取得する