2018.02.21IoT , Mendixで課題解決 , Tips , アプリ開発

IoT開発方法:Mendixを使用したIoTアプリケーション – インターネットボタン

  • このエントリーをはてなブックマークに追加

Adam Fothergil
2017年10月4日

IoTとMendixに関する全ての情報を見た後、私はIoTデバイスを使って個人用のプロジェクトを構築し、Mendix Appに組み込みたいと思っていました。
そこで、定期的に行う小さなタスクを自動化するためのIoTアプリを作ることにしました。
まずは、私の作業時間を追跡するタスクを作成します。
私はしばしば作業時間の記録を忘れてしまうので、各仕事をどのくらいしたのかを覚えておく必要があるのです。

 

なぜインターネットボタン?

Amazon Dash IoTのボタンについて初めて聞いたとき、これはとてもクールなコンセプトだと思いました。
仕事をするのに家のどこにでもボタンがおけるぞ、と。
Mendixの開発ができる私は、ボタンをより強力にする方法を知っていました。
それは、Mendixを使って、素早く簡単に電子メールを送るなどのカスタムロジックを追加することです。
リサーチした後、私はParticle.IOでインターネットボタンを注文しました!

私はインターネットボタンを、主に2つの理由から決めました。

  • デバイスは、4つのボタン、加速度計、11個のフルカラーLED、そしてスピーカーを備えていること。
  • Particle.IOプラットフォームでは、ハードウェアで独自のIoTデバイスを構築できること。
    インターネットボタンに機能を追加することもできますし、私自身でゼロからパーツを作ることもできるのです。

これにより、かなり包括的なデバイスで、素早くスタートすることができ、もしかしたら、私の仕事を補うためのIoTデバイス、つまり自分の武器を作ることができます。

 

Mendixでインターネットボタンをブーストする

インターネットボタンが到着し、私のラップトップに接続すると、ものの数分で稼働させることができました。
接続できたので早速IoTアプリケーションを作成しようと思い、オープンソースプロジェクトを見つけるためにGitHubを見ました。

Mendix Appに接続して実際の機能を使いたいと思いました。
私は請求するための作業時間を記しておく必要があるのですが、いつもその時刻を覚えていられないので、いくつかの機能を構築することに決めました。
それは、特定の作業をいつ開始していつ終了したのかを記録する簡単なものでした。
インターネットボタンの各ボタンに特定の作業を割り当てます。
ボタンを押すと、割り当てられた作業に費やした時間のログが作成される、というわけです。

Particle.IOはREST呼び出しをサポートしているので、私は以下のようなワークフローを設計しました:

  • インターネットボタンの左ボタンをクリックする。
    • <作業1>の時間を管理するために、Mendix AppにRESTリクエストを送信する。
      • まず、私のMendix Appで、実施中の作業があるかどうか確認する。
        • もしあれば、それが<作業1>かどうかをチェックする。
          <作業1>であれば、その作業を終了する。
          <作業1>でない場合は、「別の<作業>が現在実施中です」というエラーを返す。
        • 実施している作業が無い場合は、<作業1>を実施とする。
      • インターネットボタンが応答を受信する。
        • <作業1>が実施中の場合は、緑色に点灯する。
        • <作業1>が終了の場合は、青色に点灯する。
        • 別の作業が実施中の場合は、対応する<作業>が赤色に点灯する。

何をしようとしているのかを分かってもらえたと思うので、私がどのようなプログラムを作ったのかを説明します。
今回使用するインターネットボタンの場合、このコードはArduinoによって定義された構造に従ってC++で書かれています。
最初に最も理解しておくべきことは、setup()とloop()という2つの関数です。
setup()は最初に呼び出される関数であり、一度しか呼び出されません。
ここで、ボタンを起動し、REST呼び出しに対する応答を受け取る方法を設定します。

void setup()
{
	b.begin();
	Particle.subscribe(“hook-response/timeEvent”, myHandler, MY_DEVICES);
	Particle.subscribe(“hook-error/timeEvent”, myErrorHandler, MY_DEVICES);
}

loop()関数には、残りのロジックが実装されています。loop()関数は、setup()関数の完了後も継続して実行されます。

void loop()
{
	if (b.buttonOn(1)){
		showButtonLights(1,255,255,255,250);
		Particle.publish(“timeEvent”, “1”, PRIVATE);
	} else if (b.buttonOn(2)){
		showButtonLights(2,255,255,255,250);
		Particle.publish(“timeEvent”, “2”, PRIVATE);
	} else if (b.buttonOn(3)){
		showButtonLights(3,255,255,255,250);
		Particle.publish(“timeEvent”, “3”, PRIVATE);
	} else if (b.buttonOn(4)){
		showButtonLights(4,255,255,255,250);
		Particle.publish(“timeEvent”, “4”, PRIVATE);
	}
}

この関数は、次に押されるボタンを待ち受けます。
ボタンが押されると、関連するLEDの白が250ミリ秒間点灯し、「timeEvent」というRESTサービスが呼び出されます。
RESTサービスは、Particle Cloud(※)のconsole.particle.io/integrationsに定義されています。
要求は単純で、1つのデータ、今回はボタン番号を送信します。
(※今回使用しているインターネットボタンのメーカーが提供しているクラウドサービス)

{
	“String”: “{{PARTICLE_EVENT_VALUE}}”
}

「{{PARTICLE_EVENT_VALUE}}」は、ボタンからサービスにデータを送信する方法です。
今回のサービスでは、ボタン番号に置き換えられます。
私は、Mendix IoT Appで、この単一の文字列を取り込むRESTサービスを公開しています。
このサービスは、マイクロフロー REST_TimeEventを公開しています。

このサービスの応答もシンプルです。
点灯する必要のあるボタンと、応答(「エラー」、「終了」、「作業中」)の2つのデータです。
このデータはどの色を点灯させるかを示します。このデータを使用して、何が起きているかを素早く視覚化し、自分の時間が記録されているかどうかをインターネットボタンだけで知ることができます。

ボタンを押して、そのボタンに割り当てられている<作業>が予定通り作業中となると、緑色に点滅します。

もう一度ボタンを押して作業を終了すると、青色に点滅します。

別の<作業>を作業中にする場合は、既に作業中の<作業>を割り当てられているボタンが赤く点滅するので、終了させるべき<作業>がわかります。

いかがでしたでしょうか。興味をそそられるアプリケーションではないでしょうか!
自分で試してみようと思われるなら、こちらでインターネットボタンを購入し、ボタンのプロジェクトのソースコードをダウンロード後、こちらからMendixプロジェクトをダウンロードして、試してみてください。

本記事は、下記blogを元に作成しました。

How to Customize an IoT App with Mendix: Using the Internet Button

 

Mendixでビジネスを改革しよう

Mendixとは?

無料体験版
(期間制限なしで
利用できます)

ハンズオンセミナー
のお知らせ

質問やご相談
  • このエントリーをはてなブックマークに追加