YU2TA7KA's BLOG ~take one step at a time~

派生開発、組み込み開発周りのこと。

もうお家に戻らないぞ! おうちハック No.2

f:id:yuji-tanaak:20190101100501j:plain

やりたいこと

家の鍵を閉めたかどうか不安になって、家にもどることってありませんか?私はあります。そんな時いつも「外出先から鍵が閉まっってるかわかればなぁ」と思っていました。なので、外出先から閉まってる?って聞いたら教えてくれるシステムを構築しました。ドアチェッカー!

システム構成

f:id:yuji-tanaak:20190101095556p:plain
ドアチェッカーの構成

  1. ドアの鍵(サムターン)部分に取り付けたセンサーがラズパイへ加速度値を送信する。
  2. ラズパイが加速度を受信し、ドアの施錠状態を検知する。
  3. ラズパイがslackへドアの施錠状態を通知する。

ユーザがslackへ「閉まってる?」と問い合わせたら実行されます。

デモ動画

ハードウェア

名前 用途 価格
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がうまくできず時間を要しました。

おわりに

それなりに使える機能が構築できたかなと思い、2019年1月6日より運用開始しています。しかし、課題も発生しており試行錯誤中です。目指せおうちハックハウス!
なお、本記事は1月1日に作成したものを1月12日に再作成したものになります。*3


*1:私は古い型のMONOSTICK-Cを利用しています。

*2:通称バリバリ

*3:自分で誤って削除してしまいました。。。かなりショックでした。構成を思い出せないし、簡素になってしまっています。。