カテゴリー: テクノロジー

勤怠管理システムをつくってみた

当初その日の出勤退勤のみをWeb上で記録するだけの簡易なものだったのですがちょうどRaspberry Piもあり時間もあったので簡単な社内用勤怠管理システムを作ることにしました。

そしてできたものがこちら
ams.png

ams_l.jpg
※ラズベリーパイは箱の中です

AndroidやICOCA等のカードを社員分登録しているので出勤時と退勤時にかざすだけで出勤、退勤ができるようになっています。

あとは戸締り用の鍵を持っている人が限られているので一覧で出勤時間が見ることができたり必要に応じて機能を追加してたりします。

自由に作れるのがエンジニアがいる強みですね!

ただ自由度は高いとは言っても会社の人数がそれほど大きくない規模であれば費用対効果という意味で安い勤怠システムを月額等で買ったほうがいいかも。。。
作成したのは半分趣味ですので。。。

ご興味ありましたら弊社までお問い合わせください!
http://splout.co.jp/#contact

■ 各社の商標または登録商標
「Raspberry Pi」は英国Raspberry Pi財団の登録商標です。
「SONY」「FeliCa」は、ソニー株式会社の商標または登録商標です。
「FeliCa」は、ソニー株式会社が開発した非接触ICカードの技術方式です。
「Google」は、Google Inc.の商標または登録商標です。
※ Nexus7の箱をリユースさせていただきました(^^ゞ


GoogleフォームとSlackを連携させてみた

20151119_1.jpg

社内である問題が発生しました。

“ヒトによってオフィスを閉めるときの作業漏れが発生してしまう!!”

そこで出た案
・チェックリストを紙で作成
・チェックリストをホワイトボードで作成

そうだ!Google先生にお願いしよう!!

Googleフォームでチェックボックスをすべて必須にして通知すればいいじゃないか!
それを社内情報共有ツールとして利用してるSlackに通知すればいいじゃないか!
スマホからフォーム開いて作業チェックすれば誰でも同じ対応ができそう ^q^

Google先生に相談してみよう。
「google スプレッドシート slack」でググッてみました。
Qiitaの以下記事にたどり着きました。(ありがとうございます^^
http://qiita.com/mito_log/items/6457dc110b3478e3e530

1. SlackにログインしてIncoming WebHookの設定
[Configure Integrations]-[All Services]-[Incoming WebHook]
[View]をクリックして通知先Slack Channelを選択してURLを控えます。
https://hooks.slack.com/services/xxxxxxx/xxxxxxx/xxxxxx
2. 記事を参考にしてスプレッドシートにGoogle Action Script(GAS)を設定するだけ。
[ツール]-[スクリプトエディタ]
プロジェクトのトリガー → [スプレッドシートから] で [編集時]

フォームから回答をしてみると。。。
Slackに通知されない。。。

どうやらフォーム回答でスプレッドシートが編集されてもGASをキックしてくれない模様。

べ、別に回答内容をメッセージに載せなくてもいいからシート参照しなくたっていいんだからね!(震え声

1. SlackにログインしてIncoming WebHookの設定
[Configure Integrations]-[All Services]-[Incoming WebHook]
[View]をクリックして通知先Slack Channelを選択してURLを控えます。
https://hooks.slack.com/services/xxxxxxx/xxxxxxx/xxxxxx
2. 記事を参考にしてフォームにGoogle Action Script(GAS)を設定するだけ。
[ツール]-[スクリプトエディタ]
プロジェクトのトリガー → [フォームから] で [フォーム送信時]

※ 回答シートを参照しなくてもフォームの内容は簡単に取得できました。^^
そして以下のようなフォームができました。

20151119_2.jpg

Googleフォームの新しいデザインにするとGASが編集できなくなるので元の編集ページに戻すためには左下の[EXIT]のようなアイコンをクリックしてください。(Google先生は対応予定とのことです。)

通知内容はこんな感じです。

20151119_3.jpg

解錠も同じように準備しました。
これで解決すればいいなぁ。。。

(´-`).。oO( 作業漏れあったらキムタク風に「ちょ、待てよ!」って音出すようにできないかな。(古


bttn使ってみました

会社でbttnという製品を購入しました。
DSC_0272.jpg

何の変哲もない(?)押しボタンですが、これがなんとWiFi搭載でネットに繋がってます。
ボタンを押すと特定の宛先にメールを送る、とかTwitterにツイートする、とかできてしまいます。
公共の場所での簡易インタフェースとか、お年寄りのための見守りボタン的な使い方が想定されているようです。

この記事では、ボタンを押すとインターネット経由で社内のRaspberry Piに繋がったスピーカーから音が出る、というサンプルを設定してみます。

構成図

(1) bttnユーザ登録
my.bt.tnからユーザ登録と購入したボタン登録を済ませます。

(2) ボタンを押した時に呼び出されるURLを設定
my.bt.tnにログインすると、登録済のボタン一覧が表示されます。
設定対象のボタンの行にある「Action」ボタンを押してアクションを設定します。
「NEW ACTION」→「pressed」→「HTTP」と進みます。
アクションはメール送信などいろいろな種類が用意されていますが、ここでは「HTTP」(ウェブAPI呼び出し)を選びます。
ここで表示されるフォームに以下の内容を入力します。
HTTP URL: (Specify URL) http://example.com/
HTTP METHOD: GET
HTTP AUTHENTICATION: (HTTP server requires authentication) username:hogehoge password:fugafuga
このように、BASIC認証が設定されているURLへもアクセスできるようになっています。
API用のURLは後で生成するので、ここでは仮のURLを記入しておきます。
この状態で「NEXT」→「Save」で設定完了です。

(3) ウェブAPIを準備
呼び出される側のウェブAPIを用意します。
今回は社内のRaspberry Piで動いているウェブサーバを利用しました。

<VirtualHost 192.168.150.1:8080>
       DocumentRoot /var/www/bttn
        <Directory />
                Order allow,deny
                allow from all
                AuthType Basic
                AuthName "Password for bttn"
                AuthUserFile /etc/apache2/bttn_passwd
                Require valid-user
        </Directory>
</VirtualHost>
<?php
exec('/usr/bin/mpg321 /home/pi/sound/dog1.mp3');
echo "OKn";

(4) ウェブトンネリング設定
Raspberry Piのウェブサーバはファイアウォールの内側にあってインターネット非公開です。
ngrokを使ってbt.tnのサーバからアクセスできるようにします。

まず、ダウンロードページからngrokコマンドのバイナリをダウンロードします。
Raspberry Pi用は”Linux/ARM”ですね。
ダウンロードしたものを展開し、以下のコマンドを実行します。

$ unzip ngrok_2.0.19_linux_arm.zip
$ ./ngrok http 8080

ngrok実行後の画面に以下のような表示があるはずです。

Forwarding                    http://5ae30682.ngrok.io -> localhost:8080
Forwarding                    https://5ae30682.ngrok.io -> localhost:8080

このURLでインターネットから社内のRaspberry Piにアクセスできるようになりました。

(5) URLをmy.bt.tnに設定
再びmy.bt.tnからログインして
「Action」→「Current(HTTP)」と進み、HTTP URLの欄に
http://5ae30682.ngrok.io
を記入します。

これで完了です。
ボタンを押すと犬が吠えるようになりました。
手順として書くと長くなりましたが、非常に簡単です。

この単純明快なインタフェースをどう使うか、知恵の絞り甲斐のあるデバイスですね。