見出し画像

Google Sheets にログ出力

先の記事「データベースどうしよう?」で書いたように、個人や小規模事業所(LAN内)で情報を蓄積するデータベースサーバーをどうしようか考えています。初めての機器を試す時に有料のデータベースでは躊躇してしまいます。
IFTTTを使ってGoogle Sheetsに記録する分には無料で、ESP32でも出来るようなので調べてみました。

Raspberry Pi で POST

PyhonでPOSTしてみます。Pyhonです。

import requests

event = 'event1'
key = 'My_Key'
url = 'https://maker.ifttt.com/trigger/{}/with/key/{}'.format(event, key)
requests.post(url, data = { "value1" : "122", "value2" : "455", "value3" : "788" })

インターネットに接続した状態で、上のようにしてPOSTすることで、Google Sheets に 122, 455, 788 を記録することが出来ました。
event名=event1 としました。
My_Keyの部分はご自身のIFTTTアカウントでWebhooksから読み出したものに入れ替えてください。

IFTTTとWebhooks、Google Sheets の使い方はWeb上に丁寧な説明を見つけられますので、そちらをご覧ください。

ESP32 で POST

続けてESP32でPOSTを試みました。microPython です。
大分苦労しましたがWebの情報を基に、以下のようにして記録出来ました。

import ujson
import urequests

event = 'event2'
key = 'My_Key'
url = 'https://maker.ifttt.com/trigger/{}/with/key/{}'.format(event, key)
data = ujson.dumps({ "value1" : "E50", "value2" : "1730" })
res = urequests.post(url, data = data.encode('utf-8'), headers = { "content-type": "application/json" })

res.close()

先と同じくWiFiでインターネットに接続されていることが必要ですが、WiFiコネクトと切断の部分は省略しています。event名=event2 としました。

データのエンコードと、ヘッダー指定が必要でした。

最後の res.close() が無いと複数回繰り返した時に不安定動作する旨の、英語の情報があったので付け加えました。
(私の勘違いでなければ良いのですが・・・)

試した結果

ESP32で、15秒置きに2つの温度センサ(ADT7420)の値を記録してみました。date欄は年月を省いて、日にちと時刻です。

画像1

2000行を超えると、記録中のシートは2000行目を記録して止まり、シート名の後ろに ' (1)' を付けたシートが出来て、こちらに記録を続けます。後は500万セルまで続くのでしょうか?(未確認です。)

最初のシートを見ると終了時刻ー開始時刻と行数(1999行)が一致しませんでした。調べてみると以下のように4回の取りこぼしが発生しています。

開始時刻 08:16:32
欠落1  10:33:17
欠落2  13:35:32
欠落3  13:37:17
欠落4  15:14:02
2000行目 16:37:02

取りこぼし率は4/1999=0.2% です。
私のプログラムを筆頭に、原因はどこにあるのか不明です。
用途によっては許容出来ないと思います。
何か分かったら別途お知らせします。

用途

IFTTT を使って Google Sheets のセルを読み出すことは出来ないようですが、ログを記録して(しながら)遠隔地からSheetを見たり(手動で)ダウンロードすることが可能になります。

私の場合、社内のデータベースに記録・参照している、既設装置から上がってくるデータとは別に、短期間試験的にデータを採りたいと言った時に使えると考えています。
実験や原因究明のために長時間測定するケースでは積極的に利用したいと思います。

データベースどうしよう?」を全て解決するものではありませんが、一つの選択肢になりそうです。

出来ればサポート頂けると、嬉しいです。 新しい基板や造形品を作る資金等に使いたいと思います。