Raspberry Piを使って業務改善
ソリューションSecの西川です。
先日、業務改善の一環として、毎月手間がかかっていた作業の自動化をすべく
導入した社内システムのご紹介をしたいと思います。
どんなシステム?
社員の通勤費精算に関するシステムです。
コロナの時期を境に、弊社でもリモート勤務が導入されるようになったことが背景です。
従来は問答無用に毎日出社が原則だったので、各社員の通勤費は固定だったのですが…
リモート勤務が導入され、月の出社回数が社員によってバラバラになったので、各部署のマネージャは毎月締め日になると所属社員の1ヵ月の出社回数を出社管理表を見比べてチェックし、精算額が合ってるか計算して承認して…というIT系の会社とは思えないような作業に悩まされておりました。
そこで出社回数に応じて通勤費を自動算出し、全社員分の精算表をPDFに一括出力できるようなシステムを導入しました。
当然、簡単に不正出来てもアレなので、ちゃんと出社していないと出社登録できない仕組みが必要です。
弊社は社員証がFelica(非接触ICカード)となっているので、SONYのNFCリーダーとラズパイを使って、いわゆるタイムカード的な出社管理機能を作って、社員ごとにその出社回数を1ヵ月の締め日に集計する、という構想を考えました。
※ちなみにNFCリーダーは社内に余ってたコレを使いました。
Raspberry Piとは?
1枚のプリント基板の上に、最低限のCPUや入出力インターフェース、コネクタを付けただけのマイクロコンピュータで、ラズパイのほかにもArduino(アルディーノ)やESP32などがありますね。
今回は社内に余っていた初代ラズパイを使いましたので現代からするとかなり低スペックな部類になりますが、ICカードを読み取って情報をAPIでリクエストすればいいだけなので十分です。(Wi-fiモジュールが付いてないのは痛いですが)
でもサイズ感から考えると、紙たばこの箱くらいの大きさでOSがインストール出来て普通のパソコンのように使えるのですからマイコンは凄いですね。
まぁとにかくこれを使って早速作っていきます。
ラズパイでFelicaリーダーアプリケーションを構築
まずはまっさらなラズパイに専用OSであるRaspberry Pi OSをインストールします。
で、ラズパイのUSB入力端子にRC-S380リーダーを接続し、デバイスを認識しているかチェック。
その後、Pythonで動くNFCリーダーのライブラリを見つけてきてそれを設置。
※結構ネット上で同じようなことをしている人がいたのでggればすぐ出てくると思います。
ここで社内用のカスタマイズとして、ICカードを読み取ったときに社内の別システムへAPI通信するという処理を組み込みます。
単純にカードを読み取るだけでは意味ないですからね。
必要な情報としては「誰が」「いつ」カードを読み取ったのか。
ICカードにはそれぞれにIDmというユニークな番号が振られているので、それを使うことにします。
最初に社員全員分のIDmを控えて、社内システムのマスタデータに登録しておき、出社登録APIを作成。
で、あとはAPIリクエスト時にそのIDmと読み取った時間のタイムスタンプをセットで投げます。これで、誰がいつ出社したのかをデータベースで管理可能になりました。
もちろん、IDmのマスタ登録されてないカードでの読取や同じ日での同一人物による2回目以降のICカード読み取りはエラーになるように対策。
あとはプログラムを実行
sudo python3 nfc_reader.py
してICカード読み取り待機状態にして…
完成。
ICカードを読み取ると、
「おはようございます、○○さん」
「2023/08/31 08:45:00」
「出社登録が完了しました」
というようなメッセージが表示されます。
社内システム側でもしっかりとデータ登録されていることを確認。
通勤費の精算表も問題なくPDF出力出来ていました。
これで毎月地味に悩まされていた作業から解放!
この社内システム、元々は各プロジェクトの工数管理用のものだったのですが、最近は労務管理的な目線の機能も充実してきており、弊社の基幹システムとなりつつあります。
将来的には勤務表や見積、受発注などの機能も搭載出来ればいいですね。
このあたりはお客様のニーズに応じたシステム構築が可能なので、気になった方は是非弊社までご連絡ください。
ちなみにラズパイのケースはダイソーで名刺ケースを調達してきて自分で加工しました。
本当は排熱対策とかちゃんとしたほうがよさそうですが、とりあえず埃が被らなければOKくらいの感覚。お金をかけずに効率化!がコンセプトです。
長くなりましたが今回はこのへんで。