Help us understand the problem. What is going on with this article?

Raspberry pi とGoとMackerelでシェアハウスの運用しやすい鍵システムを作る

はじめに

こんにちは!都内でWeb Developerしているnariと申します。

私が住んでいるシェアハウス(ギークハウス新宿)の同居人たちで、去年の7月に開発合宿にいったのですが、その際にプロトタイプを作ったシェアハウスの鍵システムが先日完成したということで、自分の担当した部分に関して振り返りをしておこうとこの記事を書いています。

まず何を作ったかをお見せした後、今回採用したおうちハックでの運用に優れた3つの技術スタック(Raspberry piとGoとMackerel(監視系SaaS))に関して紹介したいと思います。(作った物の実装は大したことないので詳しく説明しません)

何を作ったか

一言で言うと、シェアハウスの鍵システムなのですが、以下の同居人の @wamisnet さんのツイートの動画で実際の挙動を見てもらうとわかりやすいと思いますので一度そちらご覧になってください!

こちらは、@wamisnet@retoruto_carry さんと3人で作ったものです。
私はこの鍵システムのうち、スイカなどのICカードのタッチをNFCリーダーから検知し、鍵を開けるAPIを叩くチェックインサーバー部分を作りました。
具体的にいうと、NFCリーダーへのSuiceなどのタッチからidm(FeliCaカード製造時にICチップに記録され書き換えができない固有のID番号)を取得して、別のラズパイで立っているDBサーバーとのやりとりで認証チェックして、鍵を開けるAPIを叩いたりスピーカーを鳴らす部分を作成しました。

2020/01/03追記:コメントでご指摘がありましたが、認証においてidmは偽装が可能なので、ブルートフォース攻撃対策をいれたりカメラで不審者のチェックなども行っています。ここら辺の認証周りは生体認証を取り入れたり強化していく予定です。

システム関係図

Untitled Diagram (20).png

@wamisnet 担当箇所(Open Key部分)記事: Suicaで開けられるスマートロックを作ってみた
@retoruto_carry 担当箇所(Admin部分)記事: 【おうちハック】開発合宿で3人でシェアハウスの鍵管理システムを作った【チーム開発】

実装は非常に簡単なので、ここからは今回採用したオススメおうちハック技術スタックの紹介(Raspberry piとGoとMackerel(監視系SaaS))をしようと思います。

運用しやすさを求めた3つの技術スタック紹介

Raspberry pi

image.png

言わずと知れたお手軽ハック界の雄です。

今回は常駐サーバーをこのラズパイを使って構築しました。(選定理由として、クラウド世代で物理サーバーを運用したことがなかったので簡易な形でもいいから物理サーバー運用してみたかったと言うのがあります。)

また、最新OS書込済のSDカード(ラズパイ動作保証付き、16GB)や、3Aの電源、ケース、HDMIケーブル、さらには高性能な産業用ヒートシンクまでついたスターターキットがあったりするので、そちらを買えば組み立ててマウスとディスプレイとつなぐだけで割としっかりしたコンピューターが1万円もしないで手に入ってしまいます
このRaspberry pi 3のスターターキットが素晴らしかったですが、今であればRaspberry pi 4の物を買うといいと思います。(僕も欲しい。メモリ4GBとかもはや僕の研修時代のPCとスペック変わらなさそう。。)

頑張ればネットサーフィンしてYoutubeみれたりもしますし、ディスクトップのTerminalからの操作でラズパイ上で開発することも可能です。(私は自分のパソコンで開発して、接続したいときはsshして操作してました)

要件にストレージに諸々アセットを貯めたいとか、負荷のかかる処理を回したいとかがなく、簡単な常駐プロセスのサーバーを建てたいとかであればラズパイがオススメです。もしサーバー自体がお釈迦になっても安価に買い替えれたりスペアを常備したりできるので、運用コスト面で非常に優秀です。

Go

image.png

by Renée French CC BY 3.0

Go言語はGoogleが2009年にリリースした比較的新しい静的型付け言語で、ラズパイでのおうちハックともとても相性がいいです。

特質すべきは実行環境をラズパイ上に用意する必要がなく、以下のように開発環境でクロスコンパイルしたバイナリだけで実行できるお手軽さです。nodeやpythonのように実行環境のEOLに振り回される必要がないです。

GOOS=linux GOARCH=arm GOARM=6 go build main.go -o pi_linux_arm

systemdか何かのdaemon管理ツールで、サーバー再起動時にバイナリ実行もキックするようにしておくととてもメンテナブルです。

sudo systemctl start pi.service

また、なんといっても型付き言語で愚直に書く系の言語なので、後々メンテナンスするときも当時のコードを書いた自分の意図が汲み取り安いです。(将来の自分は他人)
carbon (6).png

Goに入門されたい方は、まずはA Tour of Goからどうぞ!

Mackerel(監視系SaaS)

image.png

今回のシステムは、アプリを開いてSesamiと直接bluetoothで接続して鍵を開くという代替の手段があるにせよ、故障したまま放置され、ICカードをタッチして入れなかったりすると住人のストレスが溜まっていくかと思います。

こういったわりかし生活にクリティカルなシステムの運用には、個人のシステムとはいえどお手軽で安価な監視システムが欲しくなってきます
とはいえそのために監視サーバー立ててZabbixやNagiosなりで頑張るのは辛い、、ということで監視のSaaSを使うことに。今までDatadogは少しプライベートでいじったり、業務ではがっつりAWS CloudWatchを使っているので候補から除外して、今回は使いやすいと評判のMackerelを試してみることにしました。

具体的には、ラズパイのサーバーにMackerel agentを仕込んで、ラズパイ自体とnfcリーダーの接触感知ワーカープロセスを死活監視しました。後ついでに @wamisnet さんが建てたOpen key APIの外形監視を仕込みました。

細かい導入方法は以下を参考にしてください

ここでは、Mackerelをいじってみた感想を3つの項目に分けて紹介しようと思います。

無料枠の機能が充実

フリープランでホスト5台までなど個人開発なら十分なほど対応してくれています。
トライアルで使えた外形監視が使えなくなるので、ついでで入れたAPIの外形監視が使えないのはちと悲しい。。(使いたいならお金を払おうという話ですね)

スクリーンショット 2020-01-02 18.24.33.png
(料金 - Mackerel(マカレル): 新世代のサーバー管理・監視サービスより引用)

管理画面が見やすい

  • ホストごとに自分で設定したプロセス監視とデフォルトのメトリクス監視が一望でき、UIが非常にわかりやすい スクリーンショット 2020-01-02 18.21.20.png
  • アラートの対応履歴が観れる画面があったり、メンテナンスモードでアラートが飛ばなくできたり細かいところに手がとどく仕様が満載 スクリーンショット 2020-01-02 18.21.36.png

ここら辺は普段いじっているAWS CloudWatchだとなかなか難しい部分で羨ましいなぁと思いました。

通知の設定が容易

  • AWS CloudWatchのようにlambdaで処理を書かなくても、ノーコードでSlack通知を設定できるのはやはり最高
  • しかもメトリクスグラフの画像までメッセージに詰めてくれたり、非常に観やすくて良い(アラートの再送の設定も容易)

スクリーンショット 2020-01-02 18.20.16.png

最近外形監視までAWSさんでできるように(限られたリージョンのプレビューですが)なったり、ChatBotによってノーコードの通知が実現できそうだったり(β版ですが)と、監視の専業SaaSさんは大丈夫かしら、、と思っていましたが、やはり使いごこちと多機能性は専業SaaSに軍配が上がるなと感じました。顧客の本当に注力したいアプリ/インフラへの改善アクションにリソースを最大限さける仕組みになっていて素晴らしい。今後も使っていきたいです。

今後どうしたいか

鍵システム

ちゃっかりWebカメラも @wamisnet がつけてくれていたりするので、そちらを使って顔認証で鍵を開けれたりしたら面白いなぁなんて妄想をしています。(もうやれる時代にきているので、AutoML系サービスなどを使ってプロトタイプを作って精度チェックをしたいですね)

その他おうちハック

うちのシェアハウスでは、住人の物々交換のためのレジシステムがあったり、Alexaとおしゃべりしてテレビを操作できたり、お風呂センサーを見て今お風呂が空いているかわかったり、NatureRemoのアプリでリモコン操作できたりします。(つまりおうちハックパラダイスなんです。)

以下に開発者の紹介記事を載せておきますので是非お読みになってください!
Node-REDでシェアハウスのお風呂を爆速でハッキングする方法 - Qiita
Reactとタブレットでバーコード使ったシェアハウス物々交換システム作った話【個人開発】 - Qiita

次にやりたいこととしては、kibanaで可視化したレジシステムの情報だったり、リモコン操作だったりを集約して行える住人の管理画面を作ろうという話を @wamisnet としています。ちょっとお仕事だったり個人開発だったりで後手後手になってしまうかもしれませんが、また開発合宿なんかでがっとプロトタイピングしちゃいたいですね。
次の開発合宿はどこに行こうか。鎌倉とか奥多摩とかかな(あんまり遠出はしたくない)

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした