memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

勤怠管理サービス「ジョブカン」のオリジナルコントローラを作ってみた

2023/2/24にバージョンアップ版について書きました。もしよければそちらもどうぞ。

 

久しぶりの投稿になります。

忙しかったのもありますが、あまりモノづくりをしてなかったのもありまして、特に書くことがない日常を送っていました。。。寂しい日常です😅

さて本題。

勤務している学校でタイトルの勤怠管理サービスの導入を試みています。

まだ試用段階のようですが(紙の出勤簿と併用)、いずれ一本化されるのではないかと感じています。

世の中の流れがデジタルなのでこれはいいことだと思っていたのですが。。。実際に使ってみると。。。押し忘れてばかり。

私の注意不足が原因なのですが。。。それでもデジタルゆえに目に触れないと(Webページを開かないと)状態がわかりませんし、それゆえに気づきにくいという欠点があると感じています。

紙の場合は出勤簿が机の上にあるので、事務室にいけば自然と「あ、押さなきゃ」と気づくのですがデジタルではそうはいきません。あくまで個人的な感想ですが。。。

これ、本格導入される前になんとかできないかな。。。と考えていました。

そんなボヤキをツイートしたところ、卒業生が似たようなサービスを会社で使っていて、GPSで出退勤を検知して自動的に記録するようなツールを作ったという話しも聞き。。。スゲーなぁとと思ってはいたのですが。

このジョブカンはどうも外部APIを提供していないようで(有料サービスとしては提供しているようなので仕組みとしては当然揃えてはいる模様)、ブラウザのボタンをクリックしないといかんようでした。。。これは早々とわかってはいたのですがどうやって押すか?考え中でした。Seleniumか?

本日、授業も会議もなかったので少し調べて試作してみたわけです。

いつも通り、前置きが長くなりましたが、以下、作ったものになります。

結局、ボタンを作りました。

数年前にゲーム筐体込みでチームでゲームを開発するプロジェクトをやったことがありました。そのときの筐体を解体した部品がゼミ室に転がっていました。それを流用しました。

ボタンが大きければ目につきやすいし、帰りに部屋の電気を消したときに点滅に気づいて「あ、退勤しなきゃ」と気づきやすいと考えました。

以下、簡単に構成といいますか処理の流れを列挙します。列挙するといっても2個しかないですね。。。構成がシンプルなので簡単です。

  • Arduinoにボタンを接続し、ボタンを押下したらシリアル通信(USBケーブル経由)で特定の文字列をパソコンに送信します。

  • その文字列をChrome拡張のJavascriptで取得し(Web Serial API)、入退室であれば、Webページ(ジョブカン)上の入退室ボタンを押下します。

以下がハードウェアです。


以下がArduinoのコードです。
void setup() {
  Serial.begin(9600);
  pinMode(2, OUTPUT);
  pinMode(3, INPUT_PULLUP);
}

bool job = false;
int lamp = LOW;
long pre = 0;

void loop() {
  //detecting pushing button  
  if (digitalRead(3) == LOW) {
    job = !job;
    if (job) {
      Serial.println("I");
      beep_in();
    } else {
      Serial.println("O");
      beep_out();
      lamp = LOW;
    }
  }

  digitalWrite(2, lamp);

  //make blinking a lamp
  if (job) {
    if (millis() - pre > 1000) {
      lamp = !lamp;
      pre = millis();
    }
  }

  delay(100);
}

void beep_in() {
  tone(6, 1500);
  delay(50);  
  noTone(6);
  delay(50);  
  tone(6, 1500);
  delay(50);  
  noTone(6);
  delay(50);  
  tone(6, 2000);
  delay(300); 
  noTone(6); 
}

void beep_out() {
  tone(6, 2000);
  delay(50);  
  noTone(6);
  delay(50);  
  tone(6, 2000);
  delay(50);  
  noTone(6);
  delay(50);  
  tone(6, 1500);
  delay(300); 
  noTone(6); 
}
copy

そして、Chrome拡張は。。。以下に置いておきました。Javascritはかなり適当ですが、とりあえず動作します。必要な方は参考にしていただければ幸いです。

さて、どうでしょう。これで押し忘れがなくなるのか。。。? 試される私😁

でわでわ。