Felica(Pasori)とエクセル(とDelphiとかで)で自動勤怠アプリを作て見た1 – Information Teaching Service 雄飛

Felica(Pasori)とエクセル(とDelphiとかで)で自動勤怠アプリを作て見た1

こんばんは、脇保です。

今回は表題の通りです。

以上のものを作ってました。
先ず目的は、アナログ的にタイムレコーダーで記録している、
勤怠を自動化したいと。

仕様とかは毎度の如く大雑把で、

1.Felicaを使う。ベースはWindowsでもLinuxでも動けば何でもOK
2.勤怠帳はエクセル形式。とにかくエクセルの表が出力できればOK
3.Felicaをかざして出勤/退勤管理。使い易い事
4.ボタン一つで勤怠表出力。使い易くて管理し易い事 です。

すごーく大雑把です。
で、取り敢えず考えたのは、
BaseはWindows機で、 そこから全部管理しようかと。
目を付けたのは、FelicaLib.Dll。
こいつを使って、C++ OR VB.NET OR C#.NET OR Delphiの何れかで、
アプリを作ってしまおうかと。

WindowsPCが一台、記録専用のが増えてしまうが致し方ない。
古いVistaPCを引っ張り出して、ローカルで使って何とか凌ごう。
で、開発、というか試作着手。 ここで問題勃発。
環境は、 OS:WIndows10、
言語:VisualStudio2008エクスプレス(古い・・・)、
Pasori:SONY RC-S310(もっと古い・・・)

でやったところ、サンプルは問題なく動くが、
ソースをコンパイルすると、ものの見事に動かない。
実行時エラーで、ライブラリがエラーを吐いてしまう。
どうやら、Pasori認識時に関数に想定外の値が入ってきて、
それで固まっている様子。

今思うと、OSに対して、言語が古すぎたことが原因かもしれない。

これが、Windows7とかならまともに動いたんだろうけど。

さぁ参った。
しかし時間はない。

ここで方向転換。

社会人学生時代、PasoriとUbuntuを使って、
先生が製作する出席管理アプリの製作をお手伝いしたことがあり。
確か、LibPafeだっけ? よし、こいつを使おう。

丁度サーバもUbuntuだし、これならPCを増やさなくてもすむ。
全体的な構成はこんな感じ。

サーバ(Linux)→Felica端末設置
ログはサーバ内の共有フォルダに記録

クライアント(WIndows)→サーバからログを取得し、
Delphiアプリからエクセルを操作、
勤怠表を出力 ・・・うん、単純すぎる・・・(汗)。

で、取り敢えずググる。 参考にしたのは以下のページ。
http://masanoriprog.blogspot.jp/2012_05_01_archive.html

で、端末から、 sudo apt-get install libusb-dev と入力、
LibUSBをインストールします。

次に、LibPafeのインストール。
ここで問題勃発。
WGETでサイトどおりにやってみると、
こちらの環境(Lbuntu 17.04 64Bit) だと、インストール出来ず。
よくみると、サイトに載っているバージョンは2009年のもの。

ついでに、リンク先も提示してあったので、
直にダウンロードして、 DPKGしました。

こちらのサイトより、
http://hito.music.coocan.jp/

Libpafeのダウンロードページに行って落としてきます。
http://hito.music.coocan.jp/pasori/libpafe.html
ここから、libpafe_0.0.8-1_amd64をダウンロードします。
(Debian64Bit版の場合)

ダウンロードしたら、適当なフォルダを作成し、
そこに解答した、 libpafe_0.0.8-1_amd64を入れ、
端末から、libpafe_0.0.8-1_amd64のあるフォルダに移動します。

そして、 dpkg -i libpafe_0.0.8-1_amd64 でインストールします。

これで無事インストール完了。
さて、お次はここからどうするか?
PHPやRubyのサンプルはググると豊富にあるけれど、
できればサーバ系言語は避けたい。
余計なサービスは入れたくないので。 そこでさらにググっていると、
以下のページを発見。
http://blog.genkikko.net/2014/04/phpubuntupasorifelica.php
それによると、
LibPafeにはサンプルコマンドがついてきて、
それでDumpもできるとか。
ならばこいつを使おう。
空のフェリカカードで、 felica_dump でコマンドを打ってみると、
きちんと反応して、IDやら何やら色々返してくれた。

うん、使える。
この場合、SN(シリアルナンバー)が固有の値として使えそうだったので、
そのままこの値を使うことにした。

要は、こいつが出力した値をテキストに取り込んで、
加工して必要な値を取って来ればいい訳ですね。

基本、Sh(UnixShellScript)は得意ではないので、
ググりながら書いてみる。

色々試行錯誤して、何とかものになるものができた。

これで、一応はホスト側の作成は完成。

以下、試作のShコード。

余りお行儀の良いコードでは無いですが・・・。


#!/bin/bash

while :
do
felica_dump | sudo tee ./temp.txt
grep "SN "  temp.txt | sudo tee ./temp.txt

if [ ! -s ./temp.txt ]; then
echo "待機中..."
else

cut -c 21-27 temp.txt | sudo tee ./temp.txt
date | sudo tee ./temp2.txt
echo " , " | sudo tee ./dlmt.txt
paste temp.txt dlmt.txt temp2.txt dlmt.txt | sudo tee ./temp3.txt
felica_dump | sudo tee ./loop.txt
while [ -s ./loop.txt ];
do
felica_dump | sudo tee ./loop.txt
echo "カードをお戻しください"
done

echo "書き込み中..."
if [ ! -s ./loop.txt ]; then
cat ./temp3.txt | sudo tee -a ./kintai.txt
fi
fi
done
<div>

実行して、Feicaカード(空のもの)をPsoriにかざすと、
ログを追記しながら吐きます。
こんな感じ。


45205 , 2017年 10月 26日 木曜日 20:17:46 JST ,
45205 , 2017年 10月 26日 木曜日 20:17:47 JST ,
45205 , 2017年 10月 26日 木曜日 20:17:48 JST ,
45205 , 2017年 10月 26日 木曜日 20:17:49 JST ,
45205 , 2017年 10月 26日 木曜日 20:17:50 JST ,
45205 , 2017年 10月 26日 木曜日 20:17:52 JST ,
45205 , 2017年 10月 26日 木曜日 20:17:53 JST ,

あとは、クライアント側アプリで、
煮るなり焼くなりすれば、
どうとでもなるかと。
次回はクライアント側になります。 (まだ製作中)

ではでは、それでは。

コメントをどうぞ

メールアドレスが公開されることはありません。 が付いている欄は必須項目です