GASを使ってLINEBOTを作ろう(2)

GASを使ってLINEBOTを作ろう(1)の続き.

 

今回はBOTに「@BOT(改行)出勤」と送信すると,

スプレッドシート に時間を記入する部分を作成する.

 

コードは下記の通り.

 

これで,出勤できるようになった.

これの応用で,退勤の時刻も記入できる!!

 

GASを使ってLINEBOTを作ろう(1).

会社でちょっとした用で,過去の勤務時間が必要になったので,

経理の人に過去3ヵ月分のタイムカードを掘り起こしてもらった.

 

すると,タイムカードの右隅にその月の合計勤務時間が手書きで書いてあって,

「これ毎回手計算してるんか?大変やなぁ(^_^;)」

と思ったので,これくらいは自動でしてあげたいと思い,

勤怠管理システムを作ろうと勉強をはじめました.

 

色々調べてみると,GoogleActionScript(GAS)とLINEを使って勤怠管理している方が多かったので,私もその方向でシステムを構築する.

 

やりたいことは

例えばLINEBOTを作成して,そのBOTに

「@kintai 出勤」

と打てば,GASを介して,googleスプレッドシートにその時の日時と出勤時間をスタンプする.

「@kintai 退勤」

と打てば,同様にスプレッドシートに退勤時間をスタンプして,その日の合計勤務時間を返信する.

といったものを作る予定.

 

 

ということで,まずはLINEBOTを作成します.

LINEBOTの作成は綺麗にまとめてはるサイトがあったので,これを参考に作りました.

簡単に手順を説明すると

1)LINE BUSINESS CENTRE でbusinessアカウントを作成

2)Message API Developper trialを選択

3)LINE developpersでAPIを色々設定

といった流れです.

 

30分ほどで,さらぁーっとできます.

 

まずはLINE BOTとやりとりできるかテストしましょう.

googleドライブ内に適当にスプレッドシートを作成してください.

 

スプレッドシートの「ツール」に「スクリプトエディタ」があるので,

クリックするとエディタが開きます.ここにGASを記入していきます.

 

まずは,BOTに送ったメッセージをスプレッドシートに記録してくGASです.

 

 

 

問題なければ,これで指定したシートのA1にBOTに送信したメッセージが記録されているはず!!

次回は,出勤と退勤の分類などをやる予定....

塚本・寺田研究室新聞がきました。

私の所属している研究室である

神戸大学塚本・寺田研究室の研究室新聞が無事出来上がりました。

2016年春号

2016年春号

 

実は私、この研究室新聞の編集・デザインを担当している。

今回背景に使った色は3種類

黄色:Jaune de Provence(C:0, M:26, Y:96, K:0)

灰色:Gris d’argent(C:33, M:25, Y:27, K:0)

紺色:Bleu nuit(C:99, M:86, Y:51, K:20)

この黄色はゴッホの「ひまわり」の黄色の色と言われているそうです。

 

ついでに文字の色もBleu nuitです。

 

背景のデザインは、ファッションショーのランウェイから着想していて

表面、裏面を別々で見ると客席側から見た構図になるようにしていて(真ん中の灰色部分がランウェイだと思えば見える。)

表面、裏面を横に並べて見るとステージ側から見た構図見えるような仕組みを考えてみた(今度は灰色部分が客席)

 

一見適当にやってるように見えますが、意味をもたせたデザインです。

といってもいろいろ見方があるので、このへんはなんでも好い。

 

とにかく多くの人々にみていただけるとええなー。

 

 

ArduinoとOpenframeworksのシリアル通信。

arduinoでセンサのデータを取得

シリアル通信でOpenframeworksにデータ送信して、ビジュアライズ
という検索すればめちゃくちゃ出てくるあれ。

Arduinoから得られるセンサデータは0~1023の10bitで表現されるけど
シリアル通信はけったいなことに1byteずつしか送られへん。

センサ値を÷4して、0~255の8bitにしたら何ら問題あらへんのやけど
分解能は高いほうがええなと特に理由なく思ったから、2byteに分けて送る。

参考にしたサイトはここ。
http://d.hatena.ne.jp/kougaku-navi/20141008/p1

上の参考サイトでは、
2byteのデータを2bit, 7bit, 7bitに分けて2bitのところにheaderを入れてる。
自分のやりたいことは10bitのデータを送るだけやから2bitは無視して(どうせ00)、おまけにfooterをつけて4byteでデータを送る。

参考サイト通りに
headerは128にして、センサデータの上位7bit(0*******)2、下位7bit(0*******)2、フッターに129を使って
この順番で送る。

<Arduinoのコード>
#define SENSORPIN 0
void setup() {
Serial.begin(9600);
pinMode(SENSORPIN, OUTPUT);
}

void loop() {
int sensorData = analogRead(SENSORPIN);

byte low = sensorData & 127;
byte high = (sensorData >> 7) & 127;
byte header = 128;
byte footer = 129;

Serial.write(header);
Serial.write(high);
Serial.write(low);
Serial.write(footer);
}

sensorData & 127とは2進数でAND計算することらしい。
例えばsensorData = 900とすると

900 = 11|10000100
+  127 = 00|01111111
00|00000100となって1byteなので、low=(00000100)2となる。

sensorData >> 7 はsensorDataを7bit右シフトするということ。
900 = 11|10000100 → 00|00000111となる。
これを127とANDをとるから、high=(00000111)2となる。

127でANDをとって、7bitに分割してる。

<OF側のコード>
(シリアル通信のところだけ)

void ofApp::update(){
//シリアル通信で受信
//4バイトのデータ(head, data_high, data_low, foot)が来たら読み込み開始
if (serial.available() >= 4) {
for (int i = 0; i < 4; i++) {
receiveData[i] = serial.readByte();
}

//headerとfooterがちゃんと順番通りならデータを復元
if (receiveData[0] == 128 & receiveData[3] == 129) {
sensorData = (receiveData[1] << 7) + receiveData[2];//上位ビットを7ビット左シフトさせて下位ビットと連結
cout << “データ来ました” << endl;
cout << receiveData[0] << endl;
cout << receiveData[3] << endl;
cout << sensorData << endl;
}
}
}

receiveData[0]:header
receiveData[1]:上位bit
receiveData[2]:下位bit
receiveData[3]:footer
とはいる。
データの復元は
receiveData[1] << 7で上位bitを左シフトさせてからreceiveData[2]とORをとってる。
high = (00000111) →(000001110000000)2
(0000011|10000000)2 + (00000100)2 = (00000011|10000100)2
と900にもどる。

bitやbyteでやり取りできるようになるとできることの幅が広がって好い
と特に理由なく思いましたわ。

Webページ開設。

GWも終盤に差し掛かった5月6日金曜日。

自分のwebページを開設しました。

http://ryoizu.com

 

それに加えて、ついに私もブログをちまちまやっていこうと決意。

(ちゃんと続くかわからんが。)

 

主に、研究のためのTipsとして、また趣味でもある服飾関連のことなど

ゆるくやっていくつもりです。

 

「誰が興味あるんやっ!!」て感じやけど、一人でも少しでもこのページを踏んでくれることを願ってやっていこう。