MESH × obniz × kintone連携
obnizがMESHブロックに対応しました!
obnizのパーツライブラリ(SDK)に追加され、obniz.jsからMESHブロックが使えるようになりました。
今回は、MESHブロックを使って、obnizのBLEゲートウェイからMESHブロックの温湿度情報をkintoneに連携する方法をご紹介します。
コンテンツ
今回やること
MESHの温湿度ブロックで取得したデータを、obnizデバイス(BLE/Wi-Fiゲートウェイ)を経由してkintoneに連携、グラフ化まで行います。

用意するもの
- obnizのデバイス
- MESHブロック(温湿度)
- kintoneの開発者アカウント
作り方
(1)kintoneの準備をします
MESHから取得したデータを連携するための準備(設定)をします。
kintoneでは開発者向けに無料アカウントが用意されています。 まずはkintoneアカウントを作成してください。
アカウント作ってログインすると、ポータルが表示されます。画面内の アプリ > アプリを作成よりアプリの作成画面へ。

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

今回必要な項目は、以下の3つの項目です。
- 日時(日時タイプ)
- 温度(数値タイプ)
- 湿度(数値タイプ)
上記をドラッグアンドドロップで作っていきます。アプリ名の変更も忘れずに。

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

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

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

画面右上の「アプリを公開ボタン」をクリックして反映、kintoneでの準備は完了です。
(2)MESHブロックの準備をします
まずはMESHアプリでMESHブロックのバージョンを確認します。obnizとMESHブロックの連携はブロックのバージョン1.2.5以降で利用可能となります。

MESHブロックのバージョン確認はMESH公式アプリにて行えます。公式アプリにてそのままファームウェアアップデートも可能です。
(3)obnizの準備をします
obnizを電源にさし、Wi-Fi設定をしてonlineにします。
今回はBLE/Wi-Fiゲートウェイを使った制作例となっていますが、obniz Boardやその他ゲートウェイシリーズでも共通の操作となります。
プログラム
node.jsの環境はrunkitやrepl.itを使うのが便利です。必要なライブラリは2つです。
npm install [email protected] @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でアイデアを実現してください。
