cybozu developer network

カテゴリー内の他の記事

MESH で倉庫の出入りを確認&通知しよう

Index

はじめに

運用上、倉庫の出入りを管理したいことがあります。
○分前に人の出入りがあったか?を確認しようとすると、設置した監視カメラの映像を使うことが一般的かもしれませんが、確認に時間がかかります。
そんなとき、入退室の時間を何かのデータベースに登録しておき、その情報をかんたんに確認できるとうれしいです。

そこで、kintone と、MESH の人感ブロック・LEDブロック・ボタンブロックを組み合わせて、倉庫の出入り状況を確認できるしくみを作ってみました。

MESH についてはこちらのページをご確認ください。

完成イメージ

完成イメージ
このカスタマイズでは次のことを行います。

  • MESH の人感ブロックを使って、「エリア内に人がいるか?」をチェックします。チェック結果は kintone のアプリに登録します。
  • MESH のボタンを押して、直近 5分以内に人がいたか(該当するレコードがあるか)を kintone に問い合わせします。
  • 人がいた場合は MESH の LED ブロックが赤、人がいなった場合は MESH の LED ブロックが緑に点灯します。

※ MESH と MESH を接続しているスマートフォンは Bluetooth の範囲内である必要があります。

事前準備

kintone の設定

下記手順で作成する kintone アプリのID とAPIトークンは、 MESH の設定で利用するので控えておいてください。

アプリIDは、アプリのURLで確認できます。
https://example.cybozu.com/k/10/ の場合、「10」がアプリIDです。

kintone アプリの作成

次のフィールドをフォームに設置します。

フィールド名 フィールドタイプ フィールドコード 初期値 備考
日時 日時 DateTime  レコード登録時の時刻を初期値にする  人感センサで人を感知した時間です。
ステータス 数値 Status 人感センサの値です。
ただし登録するのみで、プログラム内で利用はしません。

API トークンの生成

「レコード閲覧」「レコード追加」権限のある API トークンを生成します。

kintone API トークンの設定

API トークンの生成方法は「API トークンを生成する」をご参照ください。

MESH の設定

MESH SDK

MESH SDK は、MESH アプリのレシピで利用するカスタムブロック(ソフトウェアブロック)を作成するツールです。
カスタムブロックでは、JavaScript を使って、複雑な処理やさまざまな Web サービスとの連携ができます。

以下の手順に従って、MESH のカスタムブロックを2つ作成します。

作成するカスタムブロックは以下の「入退室(登録)ブロック」「入退室(取得)ブロック」です。

  • 入退室(登録)ブロック:人感センサのチェック結果を kintone に登録するブロックです。
  • 入退室(取得)ブロック:kintone に問い合わせして LEDブロックを点灯させるブロック
  1. [Create New Block]をクリックし、新規ブロックを作成します。
    新規ブロックの作成
  2. [Import]タブを選択します。
    JSONのインポート
  3. エディタ部分に、後述する 「入退室(登録)」および「入退室(取得)」の JSON の内容をそれぞれ貼り付けます。
    [Load JSON]をクリックすると、上書きの確認ダイアログが表示されるので[OK]ボタンをクリックし、インポートします。
    JSONのインポートと保存
  4. インポート後、下記 Property の Dafault Value を書き換えます。
    Property の変更
    プロパティ名
    ドメイン kintone のドメインを指定してください
    アプリケーションID kintone の設定 > kintone アプリの作成で作成したアプリのアプリケーションID
    API トークン kintone の設定 > API トークンの生成で発行した API トークン
    ※ Property の Default Value は、レシピにブロックを配置するときに初期値として設定されます。
    Property の値は、MESH アプリのレシピからも変更できます。
  5. [Save]をクリックし、保存します。
    ブロックの保存

MESH アプリ

MESH アプリでは、Bluetooth で接続した MESH ブロックやMESH SDK で作成したカスタムブロックを「レシピ」のキャンバス上に配置し、処理フローを作成します。

  1. [+新しいレシピ]をタップし、レシピを作成します。
    レシピの作成
  2. MESH ブロックを接続します。
    • 人感ブロック
    • ボタンブロック
    • LED ブロック 2つ

    MESH ブロックの接続
    ブロックの追加  接続するブロックの探索 ペアリング  ブロック追加後
  3. 接続したMESHタグを、ドラッグ&ドロップでキャンバスに配置し、設定を行います。
    ブロック 設定
    人感センサ
    • 感知したら
    • 間隔(秒):60
    ボタンブロック
    • 1回押されたら
    LED ブロック 1つめのブロック
    • 点滅する
    • 色:オレンジ
    • 明るさ:1
    • 時間(秒):5秒
    • 周期(秒):1秒
    2つめのブロック
    • 点滅する
    • 色:ミント
    • 明るさ:1
    • 時間(秒):5秒
    • 周期(秒):1秒
  4. MESH SDK にサインインします。

    MESH SDK のサインイン
    サインイン  接続情報を入力しサインイン
  5. カスタムの[追加]をタップし、MESH SDK で作った2つのカスタムブロックを追加します。
    • 入退室(登録)ブロック
    • 入退室(取得)ブロック

    カスタムブロックの追加
    カスタムブロックを追加    追加後 選択したブロックを追加  追加するブロックを選択
  6. 追加したカスタムブロックを、ドラッグ&ドロップでキャンバスに配置します。
    ※ SDK でブロックを作成したときの Default Value が初期値に設定されます。
    変更する場合は、対象のブロックをタップして表示される画面で変更してください。
  7. 配置したブロックをそれぞれ次のように接続します。
    「入退室(取得)」ブロックの出力コネクタについては、次のように接続してください。
    • 1つめのコネクタ(confusion)に、色をオレンジに設定したLEDブロック
    • 2つめのコネクタ(vacant)に、色をミントに設定したLEDブロック
    ブロックの配置図

動作確認

  • 人感ブロックの前に立って感知されたら、kintone にレコードが登録されます。
  • ボタンブロックのボタンを押して、LEDブロックが光ります。

サンプルコード

入退室(登録)

入退室(取得)

サンプルコードの解説

今回作成した MESH カスタムブロックのポイントを解説します。
MESH SDK の詳細は、リファレンスマニュアルをご参照ください。

入退室(登録)ブロック

人感センサの結果を kintone に登録する

人感センサブロックは、人を感知したときに次のブロックへ信号を伝えるように設定しています。

Code

  • Execute メソッド
    人感センサブロックから伝わる結果は messageValues.stateValue に格納されています。この値を kintone に登録します。
    人感センサブロックの値を kintone に登録

入退室(取得)ブロック 

レコードの取得結果に応じて出力先を変える

「5分以内に人がいたか?」に応じて LED の色を変更させるため、2つのLEDブロックを配置しています。
カスタムブロックで、レコードがなければ 1 つめのコネクタに接続したブロックへ信号を送り、レコードがあれば 2つめのコネクタに接続したブロックへ信号を送っています。

出力コネクタを分岐させるには、次の設定を行います。

Connector

  • 2つのLEDブロックに出力するので、Output Connector を2つ用意します。
    2つのOutput Connector

Code

  • Initialize メソッド
    Function 内で共有できる変数 runtimeValues を定義します。
    runtimeValues の定義
  • Execute メソッド
    RuntimeValues のプロパティに、出力先コネクタの番号を指定します。
    デフォルトでは、2つめのコネクタに出力するようにしています。
    所定の時間以内のレコードがなければ、1つめのコネクタに出力します。
    ※ 1つめのコネクタのコネクタ番号は 0、2つめのコネクタのコネクタ番号は 1です。
    出力先コネクタの指定
    処理が終わったら callbackSucces メソッドに登録してResult メソッドに渡します。
    Result メソッドに渡す
  • Result メソッド
    Execute メソッドから渡された runtimeValues の値を indexes プロパティに設定することで、Output Connector に出力します。
    indexes プロパティに設定

おわりに

今回の記事では、「5分以内に」人がいるか?をチェックしました。
チェックタイミングを「○時までに」とすると、指定時刻までに入室(または退室)が必要な業務においての入退室管理ができます。

また、cybozu developer network では、他にも kintone と MESH を連携した記事を紹介しています。
ぜひこれらの記事も参照してみてください。

このTipsは、2019年6月版 kintoneで確認したものになります。

記事に関するフィードバック

記事のコメント欄は記事に対するフィードバックをする場となっております。
右の記事フィードバックのためのガイドを参照してコメントしてください。
記事のリンク切れなど、気になる点がある場合も、こちらのフォームからフィードバックいただけますと幸いです。

サインインしてコメントを残してください。