やりたいこと
家の鍵を閉めたかどうか不安になって、家にもどることってありませんか?私はあります。そんな時いつも「外出先から鍵が閉まっってるかわかればなぁ」と思っていました。なので、外出先から閉まってる?って聞いたら教えてくれるシステムを構築しました。ドアチェッカー!
システム構成
- ドアの鍵(サムターン)部分に取り付けたセンサーがラズパイへ加速度値を送信する。
- ラズパイが加速度を受信し、ドアの施錠状態を検知する。
- ラズパイがslackへドアの施錠状態を通知する。
ユーザがslackへ「閉まってる?」と問い合わせたら実行されます。
デモ動画
ドアチェッカー! おうちハック No.2 pic.twitter.com/QUyDJMEbPf
— YU2TA7KA (@UGKGbrothers) 2019年1月1日
ハードウェア
名前 | 用途 | 価格 |
---|---|---|
TWELITE 2525A | ドアの鍵に接着させ、ラズパイへ加速度値を無線で送信する子機端末。ボタン電池駆動。 | 3,344円 |
MONOSTICK*1 | TWELITE 2525Aのデータを受信する親機端末。ラズパイへUSBで装着する。 | 2,878円 |
ラズパイ環境 | ユーザによるslackへの投稿検知。MONOSTICKが受信したデータの処理。slackへの投稿。 | 8,800円 |
貼れるボード | TWELITE 2525Aをドア鍵に接着させる。 | 100円 |
面ファスナー*2 | TWELITE 2525Aをドア鍵に接着させる。 | 100円 |
ソフトウェア
利用サービス | slack |
---|---|
利用アプリ | slackbot |
プログラミング言語 | Python 3.5.3 |
ドア施錠状態を確認するインターフェースとしてslackを利用します。ユーザがslackbotへ問いかけたら、ラズパイ上のslackbotが反応するようにします。slackbotの構築はこちらの記事を参考にしました。
ソースコード
github.com
githubにリポジトリを作成しました。ご興味ある方は参照下さい。
施錠状態検知機能(plugins/DoorChecker.py)
センサーから受信した加速度センサのZ軸で鍵が開いているか閉まっているかを判断します。加速度センサと言いつつ、厳密には力センサのため静止していても値がとれます。力センサはこちら記事が参考になります。
省電力のために30秒に1回子機(TWE-Lite-2525A)がラズパイへセンサ値を通知するように子機の設定を変更しています。子機の設定変更はこちらの記事を参考にしています。
施錠状態通知機能(plugins/my_mention.py)
「閉まっている?」とメンションをもらったら、処理を開始します。ユーザが問い合わせたら、検知機能を実行するしくみのため、最大30秒待たないと応答が返ってこない仕様です。別タスクで検知機能を動かしておいて、問い合わせがきたら直近の状態を返すようにしたほうが良いですね。今後の課題です。
つまずいたところ
施錠状態の検知機能と通知機能の結合
参考ソースコードの都合で、検知はpython2、通知はpython3でそれぞれ実装しました。これらを結合するときに、python3に合わせようとしたときに、バージョン違いによって文字列の扱い方法が異なり、対応に時間を要しました。
他ファイルのimport
これまでライブラリimportと自作1ファイルのみの実装をしていました。今回は、自作ファイルが複数あり、自作ファイルのimportがうまくできず時間を要しました。
参考サイト
PythonのslackbotライブラリでSlackボットを作る - Qiita
TWE-Lite-2525Aで開閉センサ(Twitter連携) を作ってみた - Qiita
Python で別ファイルの import | 晴耕雨読