今回のおはなし
前回
FirebaseのCloud Firestore(β)を試してみる
前回FirebaseのCloud Firestoreを試してみたので、
今回はそれを使ってストップウォッチもどきを作ってみました。
設定みたいなもの
データベースはこんな感じです。
年・月で更にネストしようかとも思ったけどまあ必要ないかなと思ってやめました。
とりあえず以下がコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
import datetime import firebase_admin from firebase_admin import credentials from firebase_admin import firestore cred = credentials.Certificate('秘密鍵.json') firebase_admin.initialize_app(cred) db = firestore.client() today = datetime.date.today().strftime('%Y%m%d') now = datetime.datetime.now() col = db.collection(u'timer') doc = db.collection(u'timer').document(today) exists = False for d in col.get(): if d.id == today: exists = True break if exists: if doc.get().get('starttime'): doc.update({ u'endtime': now }) start = doc.get().get(u'starttime').replace(tzinfo=None) print('start: ' + start.strftime('%H:%M:%S')) print('end : ' + now.strftime('%H:%M:%S')) print('delta: ' + str(now - start)) else: doc.create({ u'starttime': now }) print('start: ' + now.strftime('%H:%M:%S')) |
動きとしては当日のデータがあるかどうか見てから、
データがないならstarttimeを入れて、
当日のデータのstarttimeがあったらendtimeを入れるだけ。
ついでに開始時間・終了時間・時刻の差分を出力するようにしました。
ちなみにFirestoreに入れるとタイムゾーン有りのタイムスタンプに変換されるようで、
そのままdatetimeの時間差分を計算するとエラーが発生してしまいました。
.replace(tzinfo=None)
を付けることで解決。(python3では別の解決法があるようです。)
結果
出力はこんな感じになります。
1日の初回に起動すると…
1 2 3 |
$ python test.py start: 15:54:49 |
開始時間だけ出ます。
2回目以降
1 2 3 4 5 |
$ python test.py start: 15:54:49 end : 20:08:24 delta: 4:13:35.941762 |
開始時刻、終了時刻、時間の差分が出ます。
まとめ
これをボタンをつけたArduinoとかラズパイとかに入れて動かせば簡単に時間を計れる。
データベースに残せるから作業時間記録とかに使えそう。
せっかくなら時間の差分もデータベースに入れたかったけど、タイプが対応していないようで無理でした。
あと、クラスオブジェクトのメソッドがまだあまり無いようでそんなに使いやすくなかったです。
参考ページ
Pythonライブラリのクラスとかのページ
※現在は削除しました