ラズパイ4なら省電力で常時起動でき、サーバを自分の管理下に置けます。
方針
研究室では各メンバーの所在を学生居室の一枚のボードで管理していましたが、いじるのが面倒だったり、実験室に直接行くと変更できなかったり、問題がありました。 そこで、所在表をインターネット上に置いて、居室や実験室ではディスプレイに移す形で確認、各自のスマホから更新する形にしようと思いました。 高々30人しか使わないサービスならクラウドにする必要もないのでオンプレミスで動かしたいという気持ちがありました。 外部サービスに丸ごと預けるのではなく、手元のラズパイでWebサーバを立てて、 ネットワークやアプリの動きまで自分で見える状態にしたかったからです。
そのうえで、PythonでWebアプリを動かしてみたかったのでFlaskを選びました。
各自のスマホからサーバ上のファイルを変更することを考えたとき、まず簡単なのはWebブラウザから編集させる方法ですが、 これだと入力欄や認証、WebからのSQLインジェクション対策など考えることが増えてしまいます。 そこで、LINEのメッセージ経由で更新することにしました。slackやdiscordにもbotサービスはありましたが、LINEは研究室メンバーの利用率100%だったので。 LINEを使うことでユーザー認証をLINEに任せることができます。 LINE botは基本的には無料で、bot側から多くのメッセージを送ると有料になります。 ユーザーからはいくら送っても大丈夫なので更新はユーザーの任意のタイミングで送ることができます。
LINEでいちいちメッセージ送るのもめんどくさいなと思って、実験室にカードリーダーなりを置いてタッチするだけで所在表を更新しようかとも思いました。 PaSoRiで学生の持っているカードキーを認識するプログラムを作るところまではいきましたが、頓挫しました。 他の研究室と共有の実験室にカードリーダーを置くわけにもいかなかったので。
なぜこの構成にしたか
Flaskを使うと、PythonだけでWebページ、API、CSV処理を素直につなげられます。
サイト上で所在表を直接いじらせると、入力欄や認証、SQLインジェクション対策など考えることが増えます。
更新の流れ
ユーザーはLINEに部屋名を送ります。 FlaskアプリはLINEのWebhookを受け取り、登録済みユーザーかどうかを確認してからCSVを書き換えます。 サイト側はそのCSVを読み、所在表として表示するだけです。
これから
作りはしましたが、LINEでメッセージを送ってwebページが更新されるのを見ただけで満足してしまって、実運用はしていません。 それと単純に実験室に入るたびにLINEでメッセージを送るのは面倒だなと。 各自のスマホのMACアドレスを登録して、Wifiルーターに認識されたものを入室扱いにしたらいいかなと思っています。