テトラポット技術ブログ「TetLab」

情報系大学生の日々の学びやノウハウなどを書こうと思います。

MESH SDKをいじった話

先日、出場したハッカソンで、MESHのSDKをいじる機会があったので書いときます。

今回やったこ

今回はMESHの動きセンサータグを使い、動作を検知したら特定のURLを叩くということをしました。

MESHとは?

センサーやボタンが着いた消しゴムサイズのMESHタグと、MESHタグをビジュアルプログラミンで他のタグに繋げることができるMESHアプリを使い、簡単にIoTサービスを作ることができるデバイスです。

meshprj.com

↑公式サイトを見るのが一番わかりやすいです。

MESH SDKとは?

MESHでは、アプリ上でセンサータグ(動きや人感など)やモバイルのタグ(カメラやマイクなど)、連携タグ(IFTTTやHue)を繋げてサービスを開発することができますが、これら以外にもソフトウェアタグといって、JavaScriptのコードを実行することができるタグがあります。そのソフトウェアタグを開発することができるのが、MESH SDKです。

meshprj.com ↑公式ドキュメントです。

まずはアカウント作る。

meshprj.com

ここでアカウントを作成してください。

f:id:tetrapod117:20171014220129j:plain

新しいタグを作る

作成したアカウントでログインすると、タグを作るページになります。

f:id:tetrapod117:20171014221742j:plain

「Create New Tag」でタグを作ることができます。 f:id:tetrapod117:20171014225929j:plain

名前や説明、入力の設定ができます。

f:id:tetrapod117:20171014225608j:plain

こんな感じでテストとして適当に書きます。

コーディング

f:id:tetrapod117:20171015163726j:plain

直接コードを書くのは、codeの項目の4つの箇所になります。

公式のドキュメントでは、それぞれ以下の際に実行されると記載されています。

メソッド 概要
Initialize Functionの初期化時に呼ばれます。内部変数の確保やスケジューラーの設定といった、初期化処理が必要な場合に実装します。
Receive 入力コネクタからメッセージを受け取った際に呼ばれます。入力コネクタが複数あり、どれから受け取ったか区別したい場合に実装します。
Execute Function実行時に呼ばれます。通常、手続きはこのメソッドに記述します。
Result Executeメソッドが完了し、出力コネクタから次のタグにメッセージを送信する際に呼ばれます。出力コネクタが複数あり、どのコネクタからメッセージを出力するかを選びたい場合に実装します。デフォルトでは全ての出力コネクタから出力されます。

今回のように入力が1つで他のタグなどに出力をしない場合は基本的にExcuteにコードを書けば大丈夫です。 特定のURLを叩くというのはこんな感じで書けます。なお、Ajaxを使うのですが、MESH内では、素のJavaScriptの中でAjaxを使います。

var apiURL = "http://example.com"; //叩きたいURL

ajax ({
    url : apiURL,
    type : "get", 
    timeout : 5000,
    success : function ( contents ) {
    log("success");  //成功した場合はアプリ内のlogへ「success」の文字列を出力 
    },
    error : function ( request, errorMessage ) {
        log("error");
        runtimeValues.outputIndex = -1;
        callbackSuccess( {
            resultType : "pause",
            runtimeValues : runtimeValues
        } );
    }
});

//次のメソッドを呼ぶかどうかの処理。
return { 
    resultType : "pause"
};

最後のreturnの部分はMESH SDK固有のもので、ExecuteからResultメソッドを呼ぶかどうかを書けます。 今回はpauseで呼んでいませんが、呼ぶ場合は、continueで呼べます。詳しくは公式を https://meshprj.com/sdk/doc/ja/#sdkdoc_section_3-2

なお、今回は入力が1つだけでしたが、入力が複数ある場合は、Receiveの中に

if ( index == 0 ) {     //1番目のコネクタから入力がきた場合の処理
    log( "入力1" );      //アプリ内のlogへの出力 
}
if ( index == 1 ) {     //2番目のコネクタから入力がきた場合の処理
    log( "入力2" );
}

このような感じで、if文で分岐処理をすることが可能です。

MESHアプリに入れる

コードを書いたら、saveボタンを押して保存しましょう。 f:id:tetrapod117:20171015174925j:plain

保存をしたら、次はMESHアプリを使います。

MESHアプリ内で、最初に作成したアカウントでログインをして、新しいレシピを作ります。 そして、下のメニューからカスタムの追加を選択します。

f:id:tetrapod117:20171015175638j:plain

そして、先ほど作成したtest_tagを選択。

f:id:tetrapod117:20171015181112j:plain

すると、test_tagが追加されるのでこれを画面上に置いて、他のタグと繋げてみましょう。

f:id:tetrapod117:20171015180955j:plain

こんな感じでログを見ると、successと出力されれば成功です。 f:id:tetrapod117:20171015180834j:plain

あとがき

もともとは、MESHのBluetooth通信を解析して、PCと直接通信できれば最高だったんですが、あまりに自分に知識がなかったですね...

MESHは非常に面白いプロダクトですが、使用するのにスマートフォンのアプリを起動しっぱなしにする必要があったり、まだまだ思うようにできないこともあるので、これからに期待したいですね。

今年中にラズパイにハブのアプリが出るらしいので楽しみです。 www.get.meshprj.com

実を言うと僕はまだMESH買ってないんですけどね...

欲しいけどお金が...

1つ6000円は高いかな...