MESH × obniz

MESH × obniz × kintone連携

obnizがMESHブロックに対応しました!
obnizのパーツライブラリ(SDK)に追加され、obniz.jsからMESHブロックが使えるようになりました。

今回は、MESHブロックを使って、obnizのBLEゲートウェイからMESHブロックの温湿度情報をkintoneに連携する方法をご紹介します。

今回やること

MESHの温湿度ブロックで取得したデータを、obnizデバイス(BLE/Wi-Fiゲートウェイ)を経由してkintoneに連携、グラフ化まで行います。

MESHのデータをグラフ化

用意するもの

  • obnizのデバイス
  • MESHブロック(温湿度)
  • kintoneの開発者アカウント

作り方

(1)kintoneの準備をします

MESHから取得したデータを連携するための準備(設定)をします。

kintoneでは開発者向けに無料アカウントが用意されています。 まずはkintoneアカウントを作成してください。

cybozu developer networkcybozu developer networkより開発環境を取得

アカウント作ってログインすると、ポータルが表示されます。画面内の アプリ > アプリを作成よりアプリの作成画面へ。

画面内の アプリ > アプリを作成よりアプリの作成画面へ

「はじめから作成」を選択し、データを入れる箱(データベース)を作っていきます。kintoneでのアプリはデータベースのテーブル(エクセルのシートのようなもの)です。

「はじめから作成」を選択し、データを入れる箱(データベース)を作っていきます

今回必要な項目は、以下の3つの項目です。

  • 日時(日時タイプ)
  • 温度(数値タイプ)
  • 湿度(数値タイプ)

上記をドラッグアンドドロップで作っていきます。アプリ名の変更も忘れずに。

日時、温度、湿度の項目それぞれ作成

各項目にフィールド名と同じ名前を入れておきます。こちらはプログラムから使用する識別子になります。

フィールドコードの変更

また、APIでnodejsから使うためにアプリの設定画面でAPIトークンも取得します。

APIトークンの取得

今回はデータの追加のみ行うので、レコード追加の権限を付与しましょう。

レコード追加の権限を付与

画面右上の「アプリを公開ボタン」をクリックして反映、kintoneでの準備は完了です。

(2)MESHブロックの準備をします

まずはMESHアプリでMESHブロックのバージョンを確認します。obnizとMESHブロックの連携はブロックのバージョン1.2.5以降で利用可能となります。

MESHアプリでMESHブロックのバージョンを確認

MESHブロックのバージョン確認はMESH公式アプリにて行えます。公式アプリにてそのままファームウェアアップデートも可能です。

(3)obnizの準備をします

obnizを電源にさし、Wi-Fi設定をしてonlineにします。

今回はBLE/Wi-Fiゲートウェイを使った制作例となっていますが、obniz Boardやその他ゲートウェイシリーズでも共通の操作となります。

プログラム

node.jsの環境はrunkitやrepl.itを使うのが便利です。必要なライブラリは2つです。

npm install obniz@3.23.0 @kintone/rest-api-client

実際のプログラムは以下のようになります。
obnizでMESHブロックをスキャンして見つけたら接続、1分ごとにデータを取ってkintoneに送る、というプログラムです

const Obniz = require("obniz");
const { KintoneRestAPIClient } = require("@kintone/rest-api-client");

const Config = {
  kintone: {
    apiToken: "ZMkIWNTenVEnCYejsvQkXqbZBOMSTCLRWPSObvnG",
    baseUrl: "https://jw1gs272i8s6.cybozu.com",
    appId: 1,
  },
  obnizId: "OBNIZ_ID_HERE",
};

const client = new KintoneRestAPIClient({
  baseUrl: Config.kintone.baseUrl,
  auth: {
    apiToken: Config.kintone.apiToken,
  },
});

const sendToKintone = async (temperature, humidity) => {
  // 追加方法についてはこちら
  // https://developer.cybozu.io/hc/ja/articles/202166160-%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E7%99%BB%E9%8C%B2-POST-
  await client.record.addRecord({
    app: Config.kintone.appId,
    record: {
      温度: { value: temperature },
      湿度: { value: humidity },
    },
  });
};

const obniz = new Obniz(Config.obnizId, { local_connect: false });

obniz.onconnect = async () => {
  log("obniz connected");
  await obniz.ble.initWait();
  const MESH_100TH = Obniz.getPartsClass("MESH_100TH");
  obniz.ble.scan.onfind = async (peripheral) => {
    log("name:", peripheral.localName);
    if (!MESH_100TH.isMESHblock(peripheral)) {
      return;
    }
    log("found");

    // Create an instance
    const temphumidBlock = new MESH_100TH(peripheral);

    // Connect to the Brightness block
    await temphumidBlock.connectWait();

    temphumidBlock.onSensorEvent = (temperature, humidity) => {
      log("temperature: " + temperature + ", humidity: " + humidity);
      sendToKintone(temperature, humidity).catch((e) => {
        log("error", e);
      });
    };

    log("connected");

    while (peripheral.connected) {
      const data = await temphumidBlock.getSensorDataWait();
      log("temperature: " + data.temperature + ", humidity: " + data.humidity);
      await sendToKintone(data.temperature, data.humidity);
      await wait(60 * 1000);
    }
  };

  await obniz.ble.scan.startWait(
    { localNamePrefix: "MESH-100" },
    { duration: null }
  );
};

const log = (...args) => {
  console.log(new Date(), ...args);
};
const wait = (ms) => {
  return new Promise((resolve) => {
    setTimeout(resolve, ms);
  });
};


log("program start");

Config部分のみ、環境に合わせて変更が必要です。

const Config = {
  kintone: {
    apiToken: "xxxxxxxxx", //Kintoneの画面でとってきたAPIトークン
    baseUrl: "https://xxxxxxxxx.cybozu.com", //Kintoneのアプリの画面のURL
    appId: 1, //Kintoneのアプリの画面のURLの https://xxxxxxxxx.cybozu.com/k/ の後ろの数字
  },
  obnizId: "OBNIZ_ID_HERE",
};

OBNIZ_ID_HEREは、使用するobnizIDに書き換えてください。

実行する

プログラムを実行すると、obnizとつながり、ログが表示されます。

2022-08-24T11:18:56.385Z program start
2022-08-24T11:18:59.427Z obniz connected
2022-08-24T11:19:02.294Z name: MESH-100BU1002173
2022-08-24T11:19:02.573Z name: MESH-100TH1000392
2022-08-24T11:19:02.574Z found
2022-08-24T11:19:07.000Z connected
2022-08-24T11:19:07.205Z temperature: 27.9, humidity: 59

 

kintoneの画面を更新するとデータが保存されています。

データの保存を確認

ちなみに、このときグラフのボタンを押すとグラフ設定ができ、温湿度のグラフを表示させることができます。一度グラフを設定すると、ボタンクリックで簡単に表示ができます。

グラフ化ができます

 


MESH」では、温度・湿度、明るさなどのセンサーのほか、ボタンやスイッチなど7種類のブロックが用意されています。

obnizとMESH組み合わせることで、データの可視化はもちろんのこと、の温度データを存し一定変化が現れにスマートフォンに通知するなど、より実務した IoT システムを現することが可能です。MESHとobnizでアイデアを実現してください。