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欄は年月を省いて、日にちと時刻です。
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を見たり(手動で)ダウンロードすることが可能になります。
私の場合、社内のデータベースに記録・参照している、既設装置から上がってくるデータとは別に、短期間試験的にデータを採りたいと言った時に使えると考えています。
実験や原因究明のために長時間測定するケースでは積極的に利用したいと思います。
「データベースどうしよう?」を全て解決するものではありませんが、一つの選択肢になりそうです。