MQTT と QuickStart と
Node-RED
日本アイ・ビー・エム  木村 桂
2015.Oct.13 @dotnsf
今日のテーマ
どうすればこいつにデータを渡せるか?
MQTT わかりますか?
HTTP と MQTT の違い
HTTP
サーバー
① リクエスト
③ レスポンス
MQTT
ブローカー
パブリッシャー
パブリッシャー
パブリッシャー
サブスクライバー
サブスクライバー
サブスクライバー
サブスクライバー
パブリッシャー
&サブスクライバー
パブリッシャーは送るだけ
サブスクライバーは受け取るだけ
両方でもよい
「リクエストしてくれた人にレスポンスを返す」一連
の処理
→② に時間がかかると全体としてのパフォーマン
ス悪化
MQTT はシンプルで軽量
② 処理
MQTT と QuickStart と Node-RED の
関係
Node-RED
アプリ
IBM Bluemix
Node-RED
アプリ
IBM Bluemix
IBM IoT
Foundation
MQTT ブローカー
MQTT パブリッ
シャー
MQTT サブスクライ
バー
quickstart.messaging.internetofthings.ibmcloud.com:1883
認証なしで誰でも使えます!
MQTT と QuickStart と Node-RED の
関係
独自アプリや独自デバイスで Node-RED に
データを送るには・・・
Node-RED
アプリ
IBM Bluemix
IBM IoT
Foundation
MQTT ブローカー
MQTT パブリッ
シャー
MQTT サブスクライ
バー
独自アプリ
独自デバイスこの部分の MQTT パブリッシュ処理が
実現できれば Node-RED に送信できる。
送信元はデバイスである必要はない!
Paho
http://www.eclipse.org/paho/
MQTT の実装を簡単にするオープンソースライブラリ( C, Java, Python, JavaScript, .. )
Java サンプル
public class QuickstartPublisher implements MqttCallback {
MqttClient myClient = null;
MqttConnectOptions connOpt;
//. MQTT ブローカー
static final String BROKER_URL = "tcp://quickstart.messaging.internetofthings.ibmcloud.com:1883";
/**
* runClient
*/
public void runClient( String payload, String deviceid, String devicetype, String eventtype ) {
// setup MQTT Client
String clientID = "d:quickstart:" + devicetype + ":" + deviceid;
connOpt = new MqttConnectOptions();
connOpt.setCleanSession( true );
connOpt.setKeepAliveInterval( 30 );
// Connect to Broker
try{
myClient = new MqttClient( BROKER_URL, clientID );
myClient.setCallback( this );
myClient.connect( connOpt );
} catch (MqttException e) {
e.printStackTrace();
}
if( myClient != null ){
// setup topic
String myTopic = "iot-2/evt/" + eventtype + "/fmt/json";
MqttTopic topic = myClient.getTopic( myTopic );
int pubQoS = 0;
MqttMessage message = new MqttMessage( payload.getBytes() );
message.setQos( pubQoS );
message.setRetained( false );
// Publish the message
MqttDeliveryToken token = null;
try{
// パブリッシュして、
token = topic.publish( message );
// ブローカーに送られることを確認
token.waitForCompletion();
}catch( Exception e ){
e.printStackTrace();
}
// disconnect
try{
myClient.disconnect();
}catch( Exception e ){
e.printStackTrace();
}
}
}
:
Node-RED の更なる活用のために・・
Node-RED
アプリ
IBM Bluemix
IBM IoT
Foundation
MQTT ブローカー
MQTT パブリッ
シャー
MQTT サブスクライ
バー
独自アプリ
独自デバイス
Node-RED の更なる発展/活用のため
に・・
• Paho などのライブラリを使って、 Quickstart へ MQTT パブ
リッシュするアプリやデバイスを多く作り出す
• デバイス ID は必ずユニークになるように!
• できれば公開しましょう!
• Node-RED も QuickStart も、 IoT /デバイス専用ではない
• リアルタイム性が求められるシステム内で、軽量な通信手段として
IBM IoT
Foundation
MQTT ブローカー
MQTT パブリッ
シャー
独自アプリ
独自デバイス
参考情報
• QuickstartPublisher
• https://github.com/dotnsf/QuickstartPublisher
• FxQuickstart
• https://github.com/dotnsf/FxQuickstart
• FX
• http://fx.mybluemix.net/
• 為替情報を IoT Foundation Quickstart(MQTT ブローカー ) に送る
• http://dotnsf.blog.jp/archives/1039352247.html
• ブログ
• http://dotnsf.blog.jp/tag/nodered

MQTT と Quickstart と NodeRED

  • 1.
    MQTT と QuickStartと Node-RED 日本アイ・ビー・エム  木村 桂 2015.Oct.13 @dotnsf
  • 2.
  • 3.
  • 4.
    HTTP と MQTTの違い HTTP サーバー ① リクエスト ③ レスポンス MQTT ブローカー パブリッシャー パブリッシャー パブリッシャー サブスクライバー サブスクライバー サブスクライバー サブスクライバー パブリッシャー &サブスクライバー パブリッシャーは送るだけ サブスクライバーは受け取るだけ 両方でもよい 「リクエストしてくれた人にレスポンスを返す」一連 の処理 →② に時間がかかると全体としてのパフォーマン ス悪化 MQTT はシンプルで軽量 ② 処理
  • 5.
    MQTT と QuickStartと Node-RED の 関係 Node-RED アプリ IBM Bluemix
  • 6.
    Node-RED アプリ IBM Bluemix IBM IoT Foundation MQTTブローカー MQTT パブリッ シャー MQTT サブスクライ バー quickstart.messaging.internetofthings.ibmcloud.com:1883 認証なしで誰でも使えます! MQTT と QuickStart と Node-RED の 関係
  • 7.
    独自アプリや独自デバイスで Node-RED に データを送るには・・・ Node-RED アプリ IBMBluemix IBM IoT Foundation MQTT ブローカー MQTT パブリッ シャー MQTT サブスクライ バー 独自アプリ 独自デバイスこの部分の MQTT パブリッシュ処理が 実現できれば Node-RED に送信できる。 送信元はデバイスである必要はない!
  • 8.
  • 9.
    Java サンプル public classQuickstartPublisher implements MqttCallback { MqttClient myClient = null; MqttConnectOptions connOpt; //. MQTT ブローカー static final String BROKER_URL = "tcp://quickstart.messaging.internetofthings.ibmcloud.com:1883"; /** * runClient */ public void runClient( String payload, String deviceid, String devicetype, String eventtype ) { // setup MQTT Client String clientID = "d:quickstart:" + devicetype + ":" + deviceid; connOpt = new MqttConnectOptions(); connOpt.setCleanSession( true ); connOpt.setKeepAliveInterval( 30 ); // Connect to Broker try{ myClient = new MqttClient( BROKER_URL, clientID ); myClient.setCallback( this ); myClient.connect( connOpt ); } catch (MqttException e) { e.printStackTrace(); } if( myClient != null ){ // setup topic String myTopic = "iot-2/evt/" + eventtype + "/fmt/json"; MqttTopic topic = myClient.getTopic( myTopic ); int pubQoS = 0; MqttMessage message = new MqttMessage( payload.getBytes() ); message.setQos( pubQoS ); message.setRetained( false ); // Publish the message MqttDeliveryToken token = null; try{ // パブリッシュして、 token = topic.publish( message ); // ブローカーに送られることを確認 token.waitForCompletion(); }catch( Exception e ){ e.printStackTrace(); } // disconnect try{ myClient.disconnect(); }catch( Exception e ){ e.printStackTrace(); } } } :
  • 10.
    Node-RED の更なる活用のために・・ Node-RED アプリ IBM Bluemix IBMIoT Foundation MQTT ブローカー MQTT パブリッ シャー MQTT サブスクライ バー 独自アプリ 独自デバイス
  • 11.
    Node-RED の更なる発展/活用のため に・・ • Pahoなどのライブラリを使って、 Quickstart へ MQTT パブ リッシュするアプリやデバイスを多く作り出す • デバイス ID は必ずユニークになるように! • できれば公開しましょう! • Node-RED も QuickStart も、 IoT /デバイス専用ではない • リアルタイム性が求められるシステム内で、軽量な通信手段として IBM IoT Foundation MQTT ブローカー MQTT パブリッ シャー 独自アプリ 独自デバイス
  • 12.
    参考情報 • QuickstartPublisher • https://github.com/dotnsf/QuickstartPublisher •FxQuickstart • https://github.com/dotnsf/FxQuickstart • FX • http://fx.mybluemix.net/ • 為替情報を IoT Foundation Quickstart(MQTT ブローカー ) に送る • http://dotnsf.blog.jp/archives/1039352247.html • ブログ • http://dotnsf.blog.jp/tag/nodered