obniz のスイッチ操作を AirTable に記録するメモ

この記事は プロトアウトスタジオ 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 もやりたくなった

M5Stack から HTTPS で AirTable にデータを書き込むメモ

API が使いやすく HTTPS のやり取りさえ作れれば、こちらの記事のように M5Stack からもデータを貯めることができて IoT とも親和性が高そうです。

今回は obniz でやってみます。

Base を作り自分の API key の取得する

Node-RED の AirTable ノードを使ってみるメモ

こちらの記事は Node-RED ですが、実際に API を使うためのデータを貯める Base の作り方や 自分の API key の取得の仕方は書いてあるので、参考にしてください。

  • Base ID
  • 自分の API key

をメモしておきましょう。

image

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
  • <OBNIZ_ID>
    • 自分の使う obniz の ID に置き換える

それぞれ、設定を行います。

動かしてみる

ということで、obniz に電源を入れて Wi-Fi に接続されたら、

node app.js

で動かしてみましょう。

image

obniz が Hello AirTable! と反応します。

image

AirTable の設定がうまくいっていれば Node.js 側でも、このように起動したときに console.log が表示されて、

image

AirTable 側に launched が記録されます。

image

スイッチを押したり左右に操作してみましょう。

image

Node.js で console.log が表示され、

image

AirTable 側に push ・ right ・ left のテキストが obniz でスイッチを操作したログとして記録されます!

今回はシンプルにスイッチ操作をやり取りしていますが、これで obniz のセンサー値を記録したり、LINE Bot でやりとりするデータを保持したりと色々な用途に使えそうですね!