自作スマートロック一旦諦めた

自作スマートロックを一旦諦めた話です。 思っていたより要件がキツすぎた。

先日の記事「M5Atom + MQTT + GrafanaでCO2を監視する」で、

  • もっと色々作りたくなった

IoT系初めて触ったけど結構楽しい! 結構安いのに(1700円ぐらい)Wi-FiとかBluetoothとかボタンとか付いていて色々遊べそうです。 スマートロック自作したい、、、

と書いていて、色々試行錯誤しましたが、やっていくうちに色々問題があることがわかって一旦断念しました。

ちなみにたまに出てくる「サムターン」というのは内側から開け締めするとき回すアレです。

そもそも何故やろうと思ったのか

まずは上述の通り、楽しそうというのがあります。

ただもともと、既製品がいまいち自分の要件を満たしていないため、スマートロックほしいなぁと思いつつ買ってはいなかった、というのが背景にあります。

既製品は、買い切りタイプで日本のサムターンに合ったものだとこの2つぐらいだと思います。

どちらも通常Bluetooth Low Energy(BLE)でスマホと通信して解錠します。 課金してBluetooth Wi-Fiハブみたいなのを買うと、その会社のサーバーに繋がってリモートで鍵の操作ができるようになります。

で、要件を満たしていないといっていたのはこのサーバーに繋がる部分です。 僕はリモートで操作できるようにしたいのですが、もしこのサーバーが攻撃されたら仕組みによっては勝手に鍵を開けられてしまいます。 仮に中間者がいたとしても安全であると明記されていないため、ちょっと怖くて買えていません。 Nature Remoみたいなリモコンの電波勝手に飛ばされるぐらいならいいんですけどね。

やったこと

先駆者を見た

なんかいっぱいいます。すごい。

家の鍵分解した

頑張ってサムターン回さなくても、分解して中にいい感じにしこめないかチェックした。 結局いい感じにしこめないっぽいことがわかったけど、鍵の構造知れたからこれはこれで楽しかったです。

いろいろ買った

↑のサーボモーターが弱かったから追加で買った。

  • サーボモーター SG92R

サムターン回す部分欲しくて買った。

  • QrioLockのサムターン回すパーツ(これだけPayPayフリマで売ってた)

結果

試行錯誤したり考えた結果、いろいろ問題があることがわかりました。

  1. サムターンが固すぎて動作が微妙

SG92Rでも、サムターンが固すぎて回ったり回らなかったりした。 たまにサムターン回すパーツとの接合部分がガバガバで、モーターの先端だけ回ったりしていた。 これは結構大変、、、

  1. ちゃんと運用していける?

たとえばなんらかのバグでずっと閉める位置にサーボモーターが力を入れて操作できなくなったら、帰ってきたときに物理鍵を使っても開けられなくて、鍵屋とかを呼ぶ羽目になるかもしれない。 鍵が固くて変な所に圧力がかかってそのうちどこか壊れそう。 なにかの理由で物理鍵で開けたときに状態管理壊れない? などなど

  1. モーターとかどうやって固定する?

ドアにモーターとか固定しなきゃいけないけど、それをちゃんと作る手段を持っていなかった… ガムテープとかで頑張ればまあできると思うんですが、比較的すぐ(数ヶ月とか)壊れそう。 多分3Dプリンターで作るのがいいんですけど、3Dプリンターも、3Dモデルを作るスキルもなし。

反省&感想

なんとかなるやろの精神で無計画で突っ込んだらなんとかなりませんでした。ぴえん。

その代わり結構知見が得られました。 鍵の構造知れたり、スマートロックのセキュリティを考えたり、スマートロックは他のIoT家電に比べてバグが致命的とか。

なんかスマートロックとの通信で単純に

{"lock": "open"}

とか送って開け締めすると、中間者攻撃とか、他の人がそれを送って開け締めできちゃいますよね。 これらを解決するために、

  • 開ける権限を持っている人からのメッセージであること
  • 最近発行されたメッセージであること が検証できればよくて、
{"lock": "open", "timestamp": "2021-06-05T19:14:15+09:00"}

みたいに発行した時間を載せたメッセージを電子署名すれば良さそうだなーって考えてました。

余ったサーボモーターは、なにか別のものに使おうと思います。 電子工作力上がったらチャレンジ再開するかも知れません。

自作しなくても、既存スマートロックを改造するとかBluetoothハブを自作するとか手はありそうですし、そっちをやってみてもいいかもしれません。

追記(2019/09/09)

今日Sesame4が発表されて買いました(え?)

というのも、スマホに擬態してBluetoothで直接通信して操作できそうなことが最近わかったためです。

(これはSesame miniだけど)

PythonでSesame OS2とBluetoothで直接通信するライブラリ

ローカルで通信できるならむしろ自作より既製品を買います。 でたまたまそのタイミングでSesame3とほぼ変わらない新作が出たのでSesame4を買いました。

ちなみに、Sesame4の発表動画見ていて

たとえばなんらかのバグでずっと閉める位置にサーボモーターが力を入れて操作できなくなったら、帰ってきたときに物理鍵を使っても開けられなくて、鍵屋とかを呼ぶ羽目になるかもしれない。 鍵が固くて変な所に圧力がかかってそのうちどこか壊れそう。

と過去の自分が持っていた疑問に対する回答があってためになりました。 詳しくは動画の1分ぐらいからを見てほしいんですが、遊星ギアというのを使ってゴネゴネする(固定する歯車を変える)とモーターの力がかかるモードと、全くかからないモードを切り替えられるらしいです。 す、すげーーー!!!