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でアイデアを実現してください。