はじめに
運用上、倉庫の出入りを管理したいことがあります。
○分前に人の出入りがあったか?を確認しようとすると、設置した監視カメラの映像を使うことが一般的かもしれませんが、確認に時間がかかります。
そんなとき、入退室の時間を何かのデータベースに登録しておき、その情報をかんたんに確認できるとうれしいです。
そこで、kintone と、MESH の人感ブロック・LEDブロック・ボタンブロックを組み合わせて、倉庫の出入り状況を確認できるしくみを作ってみました。
MESH についてはこちらのページをご確認ください。
完成イメージ
このカスタマイズでは次のことを行います。
- MESH の人感ブロックを使って、「エリア内に人がいるか?」をチェックします。チェック結果は kintone のアプリに登録します。
- MESH のボタンを押して、直近 5分以内に人がいたか(該当するレコードがあるか)を kintone に問い合わせします。
- 人がいた場合は MESH の LED ブロックが赤、人がいなった場合は MESH の LED ブロックが緑に点灯します。
※ MESH と MESH を接続しているスマートフォンは Bluetooth の範囲内である必要があります。
事前準備
- kintone アカウント
kintone 環境をお持ちでない方は当サイトのメンバー登録後、1年間無料の開発者向けライセンスをご利用いただけます。 - MESH ブロック3種
人感ブロック、ボタンブロック、LED ブロック - MESH SDK アカウント
こちらのページの[Create New Account]より、アカウントを登録してください。 - MESH アプリ
上記リンクより、利用する端末にアプリをインストールしてください。この記事では、iOS の MESH アプリを使ってレシピを作成します。
kintone の設定
下記手順で作成する kintone アプリのID とAPIトークンは、 MESH の設定で利用するので控えておいてください。
アプリIDは、アプリのURLで確認できます。
https://example.cybozu.com/k/10/ の場合、「10」がアプリIDです。
kintone アプリの作成
次のフィールドをフォームに設置します。
フィールド名 | フィールドタイプ | フィールドコード | 初期値 | 備考 |
日時 | 日時 | DateTime | レコード登録時の時刻を初期値にする | 人感センサで人を感知した時間です。 |
ステータス | 数値 | Status | ー | 人感センサの値です。 ただし登録するのみで、プログラム内で利用はしません。 |
API トークンの生成
「レコード閲覧」「レコード追加」権限のある API トークンを生成します。
API トークンの生成方法は「API トークンを生成する」をご参照ください。
MESH の設定
MESH SDK
MESH SDK は、MESH アプリのレシピで利用するカスタムブロック(ソフトウェアブロック)を作成するツールです。
カスタムブロックでは、JavaScript を使って、複雑な処理やさまざまな Web サービスとの連携ができます。
以下の手順に従って、MESH のカスタムブロックを2つ作成します。
作成するカスタムブロックは以下の「入退室(登録)ブロック」「入退室(取得)ブロック」です。
- 入退室(登録)ブロック:人感センサのチェック結果を kintone に登録するブロックです。
- 入退室(取得)ブロック:kintone に問い合わせして LEDブロックを点灯させるブロック
- [Create New Block]をクリックし、新規ブロックを作成します。
- [Import]タブを選択します。
- エディタ部分に、後述する 「入退室(登録)」および「入退室(取得)」の JSON の内容をそれぞれ貼り付けます。
[Load JSON]をクリックすると、上書きの確認ダイアログが表示されるので[OK]ボタンをクリックし、インポートします。
- インポート後、下記 Property の Dafault Value を書き換えます。
プロパティ名 値 ドメイン kintone のドメインを指定してください アプリケーションID kintone の設定 > kintone アプリの作成で作成したアプリのアプリケーションID API トークン kintone の設定 > API トークンの生成で発行した API トークン
Property の値は、MESH アプリのレシピからも変更できます。 -
[Save]をクリックし、保存します。
MESH アプリ
MESH アプリでは、Bluetooth で接続した MESH ブロックやMESH SDK で作成したカスタムブロックを「レシピ」のキャンバス上に配置し、処理フローを作成します。
- [+新しいレシピ]をタップし、レシピを作成します。
- MESH ブロックを接続します。
- 人感ブロック
- ボタンブロック
- LED ブロック 2つ
MESH ブロックの接続
- 接続したMESHタグを、ドラッグ&ドロップでキャンバスに配置し、設定を行います。
ブロック 設定 人感センサ - 感知したら
- 間隔(秒):60
ボタンブロック - 1回押されたら
LED ブロック 1つめのブロック
- 点滅する
- 色:オレンジ
- 明るさ:1
- 時間(秒):5秒
- 周期(秒):1秒
- 点滅する
- 色:ミント
- 明るさ:1
- 時間(秒):5秒
- 周期(秒):1秒
- MESH SDK にサインインします。
MESH SDK のサインイン
- カスタムの[追加]をタップし、MESH SDK で作った2つのカスタムブロックを追加します。
- 入退室(登録)ブロック
- 入退室(取得)ブロック
カスタムブロックの追加
- 追加したカスタムブロックを、ドラッグ&ドロップでキャンバスに配置します。
※ SDK でブロックを作成したときの Default Value が初期値に設定されます。
変更する場合は、対象のブロックをタップして表示される画面で変更してください。 - 配置したブロックをそれぞれ次のように接続します。
「入退室(取得)」ブロックの出力コネクタについては、次のように接続してください。
- 1つめのコネクタ(confusion)に、色をオレンジに設定したLEDブロック
- 2つめのコネクタ(vacant)に、色をミントに設定したLEDブロック
動作確認
- 人感ブロックの前に立って感知されたら、kintone にレコードが登録されます。
- ボタンブロックのボタンを押して、LEDブロックが光ります。
サンプルコード
入退室(登録)
入退室(取得)
サンプルコードの解説
今回作成した MESH カスタムブロックのポイントを解説します。
MESH SDK の詳細は、リファレンスマニュアルをご参照ください。
入退室(登録)ブロック
人感センサの結果を kintone に登録する
人感センサブロックは、人を感知したときに次のブロックへ信号を伝えるように設定しています。
Code
- Execute メソッド
人感センサブロックから伝わる結果は messageValues.stateValue に格納されています。この値を kintone に登録します。
入退室(取得)ブロック
レコードの取得結果に応じて出力先を変える
「5分以内に人がいたか?」に応じて LED の色を変更させるため、2つのLEDブロックを配置しています。
カスタムブロックで、レコードがなければ 1 つめのコネクタに接続したブロックへ信号を送り、レコードがあれば 2つめのコネクタに接続したブロックへ信号を送っています。
出力コネクタを分岐させるには、次の設定を行います。
Connector
- 2つのLEDブロックに出力するので、Output Connector を2つ用意します。
Code
- Initialize メソッド
Function 内で共有できる変数 runtimeValues を定義します。
- Execute メソッド
RuntimeValues のプロパティに、出力先コネクタの番号を指定します。
デフォルトでは、2つめのコネクタに出力するようにしています。
所定の時間以内のレコードがなければ、1つめのコネクタに出力します。
※ 1つめのコネクタのコネクタ番号は 0、2つめのコネクタのコネクタ番号は 1です。
処理が終わったら callbackSucces メソッドに登録してResult メソッドに渡します。
- Result メソッド
Execute メソッドから渡された runtimeValues の値を indexes プロパティに設定することで、Output Connector に出力します。
おわりに
今回の記事では、「5分以内に」人がいるか?をチェックしました。
チェックタイミングを「○時までに」とすると、指定時刻までに入室(または退室)が必要な業務においての入退室管理ができます。
また、cybozu developer network では、他にも kintone と MESH を連携した記事を紹介しています。
ぜひこれらの記事も参照してみてください。
このTipsは、2019年6月版 kintoneで確認したものになります。
記事に関するフィードバック
記事のコメント欄は記事に対するフィードバックをする場となっております。
右の記事フィードバックのためのガイドを参照してコメントしてください。
記事のリンク切れなど、気になる点がある場合も、こちらのフォームからフィードバックいただけますと幸いです。