この記事は プロトアウトスタジオ Advent Calendar 2021 の 24 日目の記事です。
obniz のスイッチ操作を AirTable に記録するメモです。
AirTable
Airtable | Create apps that perfectly fit your team's needs
AirTable は柔軟にデータベースが組むことができ、Google スプレッドシートのように GUI も扱いやすく、何より API が使いやすく 公式の Node.js ライブラリ もあります。
M5Stack もやったので obniz もやりたくなった
API が使いやすく HTTPS のやり取りさえ作れれば、こちらの記事のように M5Stack からもデータを貯めることができて IoT とも親和性が高そうです。
今回は obniz でやってみます。
Base を作り自分の API key の取得する
こちらの記事は Node-RED ですが、実際に API を使うためのデータを貯める Base の作り方や 自分の API key の取得の仕方は書いてあるので、参考にしてください。
- Base ID
- 自分の API key
をメモしておきましょう。
Base については、シンプルに obniz スイッチを操作したときの switch state “none” “push” “left” “right” を ActionName として書き込みます。
なお、設定にはテーブル名も必要です。今回は Table 1
にしているので、これを使います。
Node.js で airtable と obniz を動かす準備
適当なフォルダ obniz-airtable
を作って
npm init -y
で npm フォルダとして初期化します。
npm i airtable
AirTable が公式で出している Node.js ライブラリ airtable を npm インストールして準備します。
npm i obniz
そして obniz ライブラリも npm インストールして準備します。
今回のプログラム
app.js
として以下のようなプログラムになりました。
const Obniz = require('obniz'); const Airtable = require('airtable'); async function main (){ // AirTable の接続 // <AIRTABLE_API_KEY> に、自分の ApiKey に置き換える // <AIRTABLE_BASE_ID> に、今回つなぎたい Base の Base ID に置き換える const base = new Airtable({ apiKey: "<AIRTABLE_API_KEY>" }).base("<AIRTABLE_BASE_ID>"); // <AIRTABLE_TABLE_NAME> に、操作する Table 名に置き換える const table = base("<AIRTABLE_TABLE_NAME>"); // obniz の接続 // <OBNIZ_ID> に、自分の使う obniz の ID を入力 var obniz = new Obniz("<OBNIZ_ID>"); obniz.onconnect = async function () { obniz.display.clear(); obniz.display.print("Hello AirTable!"); // まず起動したと launched を AirTable に記録 const records = await table.create([ { "fields": { "ActionName":"launched" } } ]); console.log("launched getId"); console.log(records[0].getId()); obniz.switch.onchange = async function(state) { if (state === "push") { obniz.display.clear(); obniz.display.print("push"); // スイッチ操作 push を AirTable に記録 const records = await table.create([ { "fields": { "ActionName":"push" } } ]); console.log("push getId"); console.log(records[0].getId()); } if (state === "right") { obniz.display.clear(); obniz.display.print("right"); // スイッチ操作 right を AirTable に記録 const records = await table.create([ { "fields": { "ActionName":"right" } } ]); console.log("right getId"); console.log(records[0].getId()); } if (state === "left") { obniz.display.clear(); obniz.display.print("left"); // スイッチ操作 left を AirTable に記録 const records = await table.create([ { "fields": { "ActionName":"left" } } ]); console.log("left getId"); console.log(records[0].getId()); } } } } main();
以下の、
// <AIRTABLE_API_KEY> に、自分の ApiKey に置き換える // <AIRTABLE_BASE_ID> に、今回つなぎたい Base の Base ID に置き換える const base = new Airtable({ apiKey: "<AIRTABLE_API_KEY>" }).base("<AIRTABLE_BASE_ID>"); // <AIRTABLE_TABLE_NAME> に、操作する Table 名に置き換える const table = base("<AIRTABLE_TABLE_NAME>"); // obniz の接続 // <OBNIZ_ID> に、自分の使う obniz の ID を入力 var obniz = new Obniz("<OBNIZ_ID>");
あたりに、
<AIRTABLE_API_KEY>
- AirTable の自分の ApiKey に置き換える
<AIRTABLE_BASE_ID>
- AirTable の今回つなぎたい Base の Base ID に置き換える
<AIRTABLE_TABLE_NAME>
- 操作する Table 名に置き換える。今回でいえば
Table 1
。
- 操作する Table 名に置き換える。今回でいえば
<OBNIZ_ID>
- 自分の使う obniz の ID に置き換える
それぞれ、設定を行います。
動かしてみる
ということで、obniz に電源を入れて Wi-Fi に接続されたら、
node app.js
で動かしてみましょう。
obniz が Hello AirTable!
と反応します。
AirTable の設定がうまくいっていれば Node.js 側でも、このように起動したときに console.log が表示されて、
AirTable 側に launched が記録されます。
スイッチを押したり左右に操作してみましょう。
Node.js で console.log が表示され、
AirTable 側に push ・ right ・ left のテキストが obniz でスイッチを操作したログとして記録されます!
今回はシンプルにスイッチ操作をやり取りしていますが、これで obniz のセンサー値を記録したり、LINE Bot でやりとりするデータを保持したりと色々な用途に使えそうですね!