前回、ハードウェアの実験はクリアできました。
今回はスマートロックを制御する具体的な方法を考えていきます。
ICカードや各種Webサービス(GoogleHome等)を利用してスマートロックを作成されておられる方を拝見しましたが、個人でVPSサーバーを契約している者としてはこれを利用しない手は無いでしょう。
このようなイメージです。
何故直接制御器の自宅サーバーへ直接アクセスしないのかというと、自宅に近づくとスマホが自宅のWi-Fiを拾ってしまい室内では屋外と同じアドレスから自宅サーバーにアクセス出来なくなるためです。
(※屋外だと「hogehoge.com」で接続できるけど、家の中からは「192.168.1.100」のようなアドレスになる)
接続環境によってアクセスページを変更するのは非常に面倒なので、自宅にいてもVPS経由でラズパイサーバーにアクセスさせることにします。回りくどいですが操作が楽です。
物理的な部分
室内側の物理的な装置は、スマートロッック機構とドアの開閉を感知するマグネットセンサー、ドアの開閉や案内をお知らせするためのスピーカー、物理的な施錠解錠スイッチを想定。
あとはカメラやモニター、室内から取っ手に手をかけたら自動で解錠させるようにするは赤外線センサーやタッチセンサー、屋外から解錠するにはICカードリーダーや指紋センサーやテンキー等も使えますね。いろいろ考えると面白いです。
ひとまずのゴールとしてスマホからWEB経由で施錠解錠を目指します。
制御パネルには「施錠」「解錠」ボタンと「オートロックの設定解除」ボタンが必要。タッチパネル式にするか物理ボタンにするか、それとも制御器は隠してタブレットで操作するか・・・悩みどころ
履歴には「何を使って施錠解錠操作をしたのか?」という記録とドアの開閉時間を記録することは必須。場合によってはメールで警告を発信。
GPIOからサーボモーターへのPWM制御にはpigpioライブラリを使うことにしました。
pigpiodがsystemdサービスで自動起動しない /etc/rc.localに登録して自動起動させる - DreamerDreamのブログ
アプリ
WEBアプリ自体はDjangoを使えばユーザー管理までサクッと作れそうです。
①スマホからVPSにアクセス
②VPSは自宅のラズパイサーバーにアクセスして
- 現在アクセスが可能か?
- 前回の動き(サムターン自体を監視しないので)から施錠中か解錠中かの情報を取得して表示
③スマホの操作をラズパイに伝達
④ラズパイからの応答をスマホに返す
という風に、VPSはWEBアプリとラズパイサーバーの中継を担当させます。
通信
VPSサーバーまではSSL通信を行なう。
VPSからラズパイへはSocket通信とし、通信の為にオリジナルのプロトコルを作成する。
(SSLSocket通信という手段もあるけど、ブラウザやアプリ経由では無いし通信相手が決まっていてデータも単純なのでオリジナル暗号化で対応します)
接続&通信は全て暗号化して行なう。
個人宅なのでそんな厳重にする必要は無いでしょうけれど、やはりセキュリティーに配慮するに超した事はないのでこのような型にします。
次回はSocket通信をセキュアに行う方法を考えていきます。