まだプログラマーですが何か?

プログラマーネタとアスリートネタ中心。たまに作成したウェブサービス関連の話も http://twitter.com/dotnsf

タグ:iot

※(注)最初にお断りしておきます。マジメぶって書いてますが馬鹿エントリです。


全てのきっかけは最近たまにみかけるこういった記事でした:

人工知能やコグニティブエンジンと呼ばれる技術の発達により、これまで人間の脳でないと判断できなかったようなことをコンピュータができるようになり、人間の仕事がより低コストな人工知能やそれらを搭載したロボットによって奪われてしまう時代がくる、という啓発記事です。

個人的にはそこまでそんな時代が身近に迫ってきているとは思っていません。ただし、その一方で企業間の競争が働いたこともあり、ここ数年における人工知能分野の発展はすさまじいものがあります。静止画像や個人の機械認識率はぐんと上がり、各社が API を公開している背景も手伝って、人工知能に触れる機会がより身近な世界になりつつあるのも事実だと思っています。以下は個人的見解ですが、クリエイティブな仕事(例えば小説を書く、など)を学習させるのはまだ難しいにせよ、脳を使わない単純作業や、ルーチン化された業務などは意外と早い段階で人間の効率を追い抜く日がやってくるかもしれない(そうなると作業コストで勝てるわけがないので、本当に仕事を失う日がやってくるかもしれない)、と思っています。

例えばお客様とお話ししていて、ただ頷いて聞いているだけ。お客様が話し終わったらすかさず相槌を打つ、そんなフローチャートのような業務では近い将来に職を奪われてしまうかもしれないのです!
(注 実在する誰かのことではありません)
2015022305


さて話は変わって、先日秋葉原でこのような部品を買ってしまいました:

2015022300



この SEN02281P はいわゆる「音センサー」です。画像左上にある大きな丸い部分がマイクになっていて、ここで音を拾って、その情報を電気回路を通じて外部に知らせることができる、というものです。買った後で知ったのですが、Arduino に接続したり、Raspberry PiGrovePi という拡張モジュールを取り付けて簡単に使う方法がネットなどで紹介されていました。

・・・ん、もしかすると、この SEN02281P と(例えばラズベリーパイとかの)演算機能を使えば、上記のような簡単なデータフローが実現できてしまうんじゃないだろうか? つまり「誰かが喋っている時は頷き、喋り終わったら相槌を入れる、という仕組みは、このセンサーとアルゴリズムを実装するプログラムだけで実現できてしまうんじゃないだろうか?」ということに気付いてしまったのです! というわけで、よく調べずにとりあえず買ってしまいました。


自分は「ラズベリーパイならメジャーだからまあ繋がるだろう、その方法もネットで見つかるだろう」とタカを括っていたのですが、これが意外と苦戦しました。結論からいうと GrovePi を使わない方法(ラズベリーパイの GPIO に直接繋げる方法)を見つけることができませんでした。えーマジで!?自分で調べるしかないの??電子回路は苦手なんだよなあ。。まあ挑戦してみました。以下、やってみたことのおさらいの意味で書いてます。当方こっち方面はド素人なので、間違いを見つけたり、こうするともっといいよ、という方法があればウェルカム、というか教えてください。

・・・改めてパーツを眺めてみました。接続端子はこの↓画面上部の白い四角の中に生えた4つの突起部分です:
Loudness_101020063_01

これを裏返すとこんな感じ(上図とは左右が逆になった状態):
2015022301


拡大するとこんな感じ。ちょっと見難いのですが、この画面の左から順に(反対から見た場合は右から順に) SIG / NC / VCC / GND と書かれています:
2015022302


GND はアース(Ground)、VCC は電圧、これは(他の部品とほぼ共通なので)分かる。上記の商品ページを見ると、このパーツの動作電圧は 5V(3.5~10V) と書かれているので、とりあえず 5V の電圧ピンにジャンパケーブルを繋いであればいいかな。そして SIG はシグナル、つまりここを GPIO27 とかに繋げて音の信号を受け取るんだろうな・・・ で、NC ?なんだこれ、見たことないぞ・・・

で、ここだけ調べて分かったのは NC = Not Connected 、つまり「どことも繋がない」という端子らしい。そうなんだ。。じゃ、なんで存在してるんだろ?? うーん・・・まあ、いいやw

というわけで、ジャンパケーブルを使ってこんな感じで自分のラズベリーパイの GPIO に接続しました:
2015022303

これで 5V の電源を供給し、アースも備え、SEN02281P が感知した音を取り込む仕組みが動くはずです。実際の写真はこんな感じです(メス-メスのジャンパーケーブルがあればもっと綺麗に接続できたのに・・・):
2016022400


そして、ラズベリーパイ側にはこのような Python プログラムを導入しました:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# SEN02281P ----- RaspberryPi GPIO
# =SIG ---------- 13
# =NC
# =VCC ---------- 2
# =GND ---------- 20

import paho.mqtt.client as mqtt
import time
import RPi.GPIO as GPIO

def on_connect(client,userdata,flags,rc):
	print( "Connection with result code " + str(rc) )
	client.subscribe( "sen02281p" )

def on_message(client,userdata,msg):
	print( msg.topic + " " + str(msg.payload) )

def reading(sensor):
	sum = -1 
	if sensor == 0:
		sum = 0
		for i in range(0,20):
			time.sleep(0.1)
			a = GPIO.input(SIG)
			sum += a
	else:
		print "Incorrect function."

	return sum

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
SIG = 13
GPIO.setup(SIG,GPIO.IN)

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message

client.connect( "iot.eclipse.org", 1883 )
while client.loop() == 0:
	msg = reading(0);
	client.publish( "sen02281p", msg, 0, True )
	pass

GPIO.cleanup()
※事前に pip install paho-mqtt をして、Paho の Python ライブラリを導入済みです。

ちなみに上記ソースファイル(sen02281p.py)はこちらからダウンロードできます:
https://raw.githubusercontent.com/dotnsf/sen02281p/master/sen02281p.py


GPIO の(SEN02281P の SIG 端子とつながっている)13番ピンからのインプット情報を 0.1 秒ごとに20回(つまり2秒間)取得し、その20回中音が確認できた回数を MQTT ブローカー(iot.eclipse.org)に投げる、というものです。つまり MQTT ブローカーに対しては2秒おきにどれくらい音が識別できたかを 0 から 20 の整数値でパブリッシュする、というものです。トピックは上記例では "sen02281p" と指定していますが、皆さんがもしこのソースを使う場合は少し変えていただけると嬉しいです。

次に Bluemix 上の NodeRED 環境を使って、このパブリッシュされたメッセージを取り出す仕組みを用意します。MQTT インプットノードを用意し、ホスト名に上記の MQTT ブローカーホスト(iot.eclipse.org:1883)、トピックに "sen02281p" を指定しています。このノードからは2秒に1回、ラズベリーパイの接続された SEN02281P のマイクから拾った音の頻度が渡されてくる、という仕組みとなります。また、その取り出した結果を /ws/unzk_sensor というパスの WebSocket に出力しています:
2015022304


後はこの /ws/unzk_sensor からリアルタイムにデータを取り出して動く WebSocket アプリケーションを用意してあげればマイクで拾った音の頻度をリアルタイムに可視化するようなアプリケーションを作ることができる、ということになります。そのサンプルアプリ(やその中で使う画像)も合わせてこちらで公開しておきます:
https://github.com/dotnsf/sen02281p


このアプリを上記の NodeRED 環境にデプロイしてアプリケーション(hoho.html)を開くと、このような画面になります:
2016022401


ひたすら「頷いている」画面になっています。何もデータが送られていないとただ頷いているだけですが、一応この画面が出ればデプロイには成功していることになります。

ではラズベリーパイ側のアプリも起動します。ネットに接続されたラズベリーパイ上で先程の MQTT パブリッシャーアプリを実行します:
# python sen02281p.py

そして先程の頷き画面をリロードすると・・・ ラズベリーパイに接続されたマイクが音を拾っている間は頷き、音が途切れたと判断した時に「ほほー」と相槌を売ってくれるようになります!
2016022402


この「音を拾っているか」「音が途切れたか」の判断がまだ少し甘いところがあるかもしれませんが、一応それっぽく動いていることが確認できました。これで忙しい営業さんに変わってお客様のお話しを上手に引き出してくれるロボットができました(笑)。


実際に動いている動画を Ustream に上げておきます:

Live streaming video by Ustream




IBM BluemixNode-RED および IBM IoT Foundation 環境を使って集めたデータをリレーショナルデータベース(dashDB)に格納する、という手順を紹介します。

まず準備段階として、「何の」データを集めるか、という問題があります。技術的な要素としては IBM IoT Foundation QuickStart 環境に MQTT パブリッシュが可能なアプリケーションやデバイスであれば何でもいいのですが、後のデータ解析のことを考え、シミュレーターではなく実機のデータを集めることにします。今回は IBM developerWorks Recipes から提供されているサンプルの1つでもあるラズベリーパイを使うことにします:
Connect a Raspberry Pi to Internet of Things Foundation

上記ページの Recipe を参照してラズベリーパイにアプリケーション("iot" という名前のサービス)を導入すると、ラズベリーパイから1秒ごとに CPU 負荷率(%)、CPU 温度(℃)、そしてサインカーブを描くような -1 から 1 までの間の値、の3つの値が1秒おきに IBM IoT Foundation(MQTT ブローカー)に送られるようになります。今回はそのデータを集めてみます。

iot サービスは MAC アドレスを deviceId として IoT Foundation QuickStart にメッセージを MQTT パブリッシュする仕様になっています。そこで iot サービス導入済みのラズベリーパイにログインし、ifconfig コマンドでイーサネットポート(或いはワイアレスポート)の MAC アドレスを調べておきます(下図では b827ebb9ddc0 ):
2015121502

ちなみにこの MAC アドレスは本物なので、もしラズベリーパイのデータを集めたいのであれば同じアドレスを指定いただければ、僕の自宅のラズパイデータを収集することができますw


そして Bluemix 上に作成した Node-RED 環境に ibmiot インプットノードと、debug アウトプットノードを配置して、線を結びます:
2015121501


また ibmiot インプットノードをダブルクリックして開き、deviceId 欄に先程調べた MAC アドレスを入力して OK をクリックします:
2015121503


また debug アウトプットノードもダブルクリックして開き、Output 欄を "complete msg object" に変更します(実体である payload 以外のデータも出力するようにします):
2015121506


最後に Node-RED 画面右上の Deploy ボタンをクリックすると、このノードアプリケーションが動き出します。指定した deviceId のデータを IBM IoT Foundation QuickStart(MQTT ブローカー)を通じて取得し、画面内の debug タブに出力されます:
2015121504


この個々のデータをよく見るとこのようなデータが送られてきていることが確認できます:
2015121505

{
"topic": "iot-2/type/iotsample-raspberrypi/id/b827ebb9ddc0/evt/status/fmt/json",
"payload": { "d":{ "myName": "myPi", "cputemp": 40.08, CPU温度(℃) "cpuload": 0,   CPU負荷(%) "sine": 0.53    サインカーブの値 }
},
"deviceId": "b827ebb9ddc0",
"deviceType": "iotsample-raspberrypi",
"eventType": "status",
"format": "json",
"_msgid": "8ebe5e09.7141a" 一意のメッセージID }

上記の赤字で書かれたデータは個々のメッセージ毎に変わるデータなので、このデータを集めることにします。先程作ったパレットから線を削除し、function ノードを間に追加して線を繋ぎ直します:
2015121507


function ノードをダブルクリックして、ここで JSON データの変換を行うよう指定します。以下のに内容に書き換えて OK をクリックしてください:
2015121508

return { payload:{
 ID: msg._msgid,
 CPUTEMP: msg.payload.d.cputemp,
 CPULOAD: msg.payload.d.cpuload,
 SINE: msg.payload.d.sine
}};

これで送られてくるメッセージから、ID, CPUTEMP, CPULOAD, SINE の4つの値だけをフラットに取り出すことができるようになりました。この状態で再度 Deploy すると debug タブにはこのようなデータが流れてくるはずです:
2015121509


この payload 部分を dashDB に格納します。改めて Bluemix のプロジェクトに dashDB サービスを追加します:
2015121501


実際にデータを追加(insert)するには、その前にテーブルを定義しておく必要があります。テーブルを定義するために dashDB サービスをクリックし、"LAUNCH" ボタンをクリックしてウェブコンソール画面へ移動します:
2015121502


dashDB のウェブコンソール画面が表示されたら、左メニューから "Tables" を選択します:
2015121503


テーブル一覧画面で "Add Table" ボタンをクリックします:
2015121504


"Create a table" ダイアログボックスが表示されます。ここで CREATE TABLE の SQL を指定して、テーブルを作成します:
2015121505


集めたデータを格納できるよう、以下の内容で RPDATA テーブルのスキーマを指定し、最後に "Run DDL" ボタンをクリックします:
CREATE TABLE "RPDATA"
(
  "ID" VARCHAR(20),
  "CPUTEMP" DOUBLE,
  "CPULOAD" DOUBLE,
  "SINE"  DOUBLE
);

"DDL ran successfully" というメッセージが表示されれば成功です:
2015121506


改めて先ほどの画面に戻るとテーブル一覧の中に "RPDATA" テーブルが追加されています。"RPDATA" テーブルを選択すると RPDATA テーブルの設計要素が表示されます。これで集めたデータを格納するためのテーブルが定義できました:
2015121507


改めて Node-RED 画面に戻り、dashDB ノード(左側だけに接続パーツが付いているもの)をパレットに追加し、function ノードから紐付けます:
2015121508


dashDB ノードをダブルクリックして、Service には Bluemix 上のサービス名称(おそらく選択肢は1つだけなのでそれを選択)、Table にはこのデータを格納する RPDATA テーブル(上記で定義したテーブル)を指定し、OK ボタンをクリックします:
2015121509


この状態で改めて Deploy します。成功しても Node-RED 上の画面では特に変化はありませんが、ラズベリーパイから送られてくるデータは dashDB の RPDATA テーブルに格納され続けているはずです:
2015121510


しばらく待ってから dashDB のウェブコンソール画面に移動し、テーブル一覧で RPDATA テーブルを選択して Browse Data タブを選ぶと、その時点までに溜まったデータが表示されます:
2015121511


これでラズベリーパイのデータを IBM IoT Foundation QuickStart 経由で dashDB に格納する、という処理が実現できました。


(追記 このエントリの続編はこちらです)
 

このエントリの続きです:
IBM IoT Foundation サービスへのデバイス登録方法

IBM IoT Foundation サービスを使うために、同サービスにデバイスを登録する方法を上記で紹介しました。では IBM IoT Foundation サービスに登録したデバイスのセンサーデータを Node-RED で集めるための方法を紹介します。


まずは上記手順の完了した IBM IoT Foundation サービスの環境変数を参照し、apiKey と apiToken の値を確認しておきます。これらの値は後に利用します:
2015112600


次に Node-RED のフローエディタを開き、IBMIoT インプットノードを1つ用意します:
2015112601


同ノードをダブルクリックして、属性を編集する画面に切り替えます:
2015112602


IBM IoT Foundation サービスを使う場合、Authentication は QuickStart ではなく、API Key にする必要があります。また API Key は "Mine" を選択、その他は以下のようにチェックボックスを付けます(名前も IBM IoTF に変更しています):
2015112603


API Key の横にある鉛筆マークをクリックしてノードの属性を確認します。ここではデバイスを追加した IBM IoT Foundation サービスの API Key と API Token(上記で確認したもの)が入っていることを確認してください(入っていなかったら入力してください):
2015112604


最後にこのノードにデバッグ output ノードを足して&繋いで、送られてきたデータが参照できるようにしておきます。この状態でデプロイしておきましょう:
2015112605


次に IoT Foundation サービスにに登録したデバイスから実際に MQTT メッセージをパブリッシュして、Node-RED のフローに送られたデータが表示されることを確認してみましょう。今回想定している環境ではこのようなデバイスを IoT Foundation サービスに登録していました:
属性属性値
組織IDttb8bh
デバイスタイプMyDevice
デバイスID(MACアドレス)112233445566
認証トークン(自分で指定する接続パスワード)K.Kimura777


このデバイスの場合、MQTT パブリッシャーとしては以下のような条件で IBM IoT Foundation サーバーにメッセージをパブリッシュすることになります:
設定項目設定値
MQTT ブローカーホストttb8bh.messaging.internetofthings.ibmcloud.com
(組織ID).messaging.internetofthings.ibmcloud.com
MQTT ブローカーポート1883
(固定値)
クライアントIDd:ttb8bh:MyDevice:112233445566
d:(組織ID):(デバイスタイプ):(デバイスID)
認証ユーザーIDuse-token-auth
(固定値)
認証パスワードK.Kimura777
(認証トークン)
トピックiot-2/evt/event_id/fmt/json
(固定値)
メッセージ{"d":{"a":"x","b":"y","c":"z"}}
(任意のJSONテキスト)


実際に動くデバイスがあれば、この内容でパブリッシュするようなコードを記述することでメッセージを送信することができます。ここでは MQTTLens を使って同じ動きをエミュレートして、動作を確認してみることにします。

まずコネクション画面では以下の様な内容でホスト名、クライアントID、ユーザー名、パスワードを指定して接続してください:
iotf08


実際にパブリッシュする際には、上記の Topic と JSON メッセージを指定してパブリッシュします:
iotf09


メッセージが正しく送信されれば、Node-RED 側の Debug タブに送信した JSON が表示されるはずです:
2015112601


期待通りに動きました。これで QuickStart を使わずに IBM IoT Foundation サーバーを使う方法が分かりました。QuickStart でなければ QOS = 1 の制約もなく、より自由度の高い MQTT ブローカー利用が可能になりますね。


(参考資料)
https://docs.internetofthings.ibmcloud.com/ja/messaging/mqtt.html
https://docs.internetofthings.ibmcloud.com/ja/messaging/devices.html


 

IBM BluemixIoT Foundation サービスにデバイスを登録する手順をまとめておきます:
2015112501


IBM IoT Foundation の QuickStart サービスを使うと、特定の1台のデバイスのデータを簡単に集めて Node-RED に送る、なんてことができるようになるのですが、QuickStart には QuickStart なりの制約(QOS=1のみ、とか)が存在したり、Bluemix サービスの中には IoT Foundation サービスにデバイスが登録されている前提で提供しているサービスもあったりするので、QuickStart で繋がればよい、というわけにはいかないケースもあります(さすがに本番サービスを QuickStart で、というケースは逆に珍しいと思うけど・・)。

というわけで、IoT Foundation サービスへのデバイス登録手順を以下に紹介します。なお、ここでは以下のような条件のデバイス1台を IoT Foundation サービスに登録するものとします。自分の手持ちのデバイスを登録する場合は適宜自分の環境のデータと読み替えてください:
属性属性値
デバイスタイプMyDevice
デバイスID(MACアドレス)112233445566
認証トークン(自分で指定する接続パスワード)K.Kimura777


まだ自分の Bluemix アプリケーションに IoT Foundation サービスをバインドしていない場合は Bluemix 上から IoT Foundation サービスを指定して追加&バインドします:
2015112502


Bluemix 上のアプリケーション概要から IoT Foundation サービスのアイコンをクリックします:
2015112503


IoT Foundation サービスの説明画面が表示されるので、「ダッシュボードの起動」と書かれたボタンをクリックして、IoT Foundation ダッシュボードに移動します:
2015112504


IoT Foundation ダッシュボード画面が表示されます。この時点で一意に割り振られた組織ID(下図では ttb8bh)が確認できます。この組織 ID は MQTT パブリッシャーからメッセージを送信する際に必要になるのでメモしておきましょう。 ではデバイスを登録してみます。デバイスタブから「デバイスの追加」ボタンをクリックします:
iotf01


まずは(QuickStart でも使った)デバイスタイプを指定します。今回は MyDevice というデバイスタイプを指定します。初めてこのデバイスタイプを指定する場合は「デバイス・タイプの作成」ボタンから、以前に作ったことがあればセレクションボックスの選択肢から選んで、MyDevice デバイスタイプを指定します:
iotf02


次にデバイス ID を指定します。今回の例では 112233445566 というデバイス ID を指定します(ここにはネットワーク上で一意な ID を指定するので、一般的には MAC アドレスを指定します):
iotf03


次にセキュリティの認証トークン(パスワード)を指定します。自動生成することも、自分で指定することもできますが、この値は一度作ってしまうと後から変更できず、また後から参照することもできなくなるため、メモするなり、絶対に忘れないようにするなり、注意が必要です。今回は自分で認証トークン K.Kimura777 を指定することにします:
iotf04


追加するデバイスの内容確認画面が表示されます:
iotf05


デバイスを登録すると、資格情報が表示されます。この画面(特に認証トークン情報)は二度と見ることができないため、絶対に忘れないようにしましょう(忘れてしまった場合は一度デバイスを削除し、登録し直してください):
iotf06


改めて IoT Foundation ダッシュボードに戻ると、いま登録したデバイスがデバイス一覧に追加されているはずです。2台以上のデバイスを登録する場合は、上記の手順を繰り返してください:
iotf07


ちなみに、こうして登録したデバイスから IoT Foundation に対して JSON メッセージを送信(パブリッシュ)する場合、以下の内容を指定して MQTT パブリッシュを実行することになります:
項目指定する値
MQTTブローカーホストttb8bh.messaging.internetofthings.ibmcloud.com
(組織ID).messaging.internetofthings.ibmcloud.com
MQTTブローカーポート番号1883
(固定値)
クライアントIDd:ttb8bh:MyDevice:112233445566
d:(組織ID):(デバイスタイプ):(デバイスID)
認証ユーザー名use-token-auth
(固定値)
認証パスワードK.Kimura777
(認証トークンの値)
トピックiot-2/evt/event_id/fmt/json
evnet_id 部分は任意文字列


 

Chrome 拡張アプリケーションとして MQTT パブリッシャー/サブスクライバーとして動作する MQTTLens なるものを使ってみました:
2015111201


これを Chrome ストアからダウンロード(インストール)して起動すると、MQTT のクライアントとして利用できます。パブリッシャーとしてもサブスクライバーとしても動作する、というものです。動作確認に便利そうです。


試しに IBM BluemixNode-RED + IoT Foundation QuickStart 環境で使ってみました。今回の例では MQTTLens を MQTT パブリッシャーとみなして IoT Foundation QuickStart にメッセージをパブリッシュし、Node-RED 側でそのメッセージを受け取って表示する、というシンプルな流れを試してみました。

まずは Node-RED 側を用意します。IBM Bluemix のボイラープレートを使って Node-RED 環境を構築し、Node-RED フローエディタを開き、IBMIOT (input)ノードと Debug (output)ノードを1つずつ配置して接続します:
2015111202


IBMIOT ノードの属性を以下のように指定します。今回は QuickStart 環境を使うので、"Authentication" には "QuickStart" を指定し、"Device Id" として、誰も思いつかないような適当な文字列(この例では "mydeviceid1234")を入力します:
2015111203


最後にこの状態で "Deploy" します。これで Node-RED 側の(つまり MQTT サブスクライバー側の=受け取り側の)準備は完了です。MQTT メッセージが送られてきさえすれば、そのメッセージ内容を表示できる準備が整いました。いつもながら Node-RED だと簡単です:
2015111204


次に MQTTLens 側を設定します。Chrome を起動して MQTTLens を開き(または上記のダウンロード URL からダウンロード後に「アプリを起動」ボタンをクリックし)ます:
2015111209


MQTTLens の初期画面が表示されたら、画面左上の "Connections" 横の+印をクリックします:
2015111205


"Connection Details" 画面が表示されたら、以下の赤枠の内容を指定します。"Connection name" は接続に付ける名称なので任意の文字列で構いません(図では "QuickStart")。"Hostname" には IBM IoT Foundation QuickStart サーバーを指定する必要があるので "quickstart.messaging.internetofthings.ibmcloud.com" を指定します。"Port" はデフォルト値の "1883" のままにします。"Client ID" には QuickStart 用のフォーマットである "d:quickstart:(任意の値):(Device Id)" を指定します。この中の (Device Id) の部分は、先程の Node-RED フローエディタの中で指定した Device Id の値(上記例では mydeviceid1234)と同じものを指定してください。最後に画面右下の "CREATE CONNECTION" ボタンをクリックして接続します:
2015111206


接続すると MQTTLens の画面が以下のように切り替わります(指定した "QuickStart" が "connected" な状態になっていることがわかります)。今回 MQTTLens は MQTT パブリッシャーとして使いたいので、"Publish" と書かれた下の部分を使います。まず "Topic" にはこれも QuickStart 用のフォーマットである "iot-2/evt/(任意の文字列)/fmt/json" と入力し、その下の "Message" に適当な文字列を入力します。最後に "Publish" ボタンをクリックして、このメッセージを QuickStart サーバーにパブリッシュします:
2015111207


正しくメッセージが送信されると、稼働中の Node-RED アプリケーションがこのメッセージを受け取り、Debug タブ内に Message で指定した内容が表示されるはずです:
2015111208


あっさり成功。MQTT パブリッシャー側のデバイスをブラックボックス化しての動作確認などには便利に使えそうで重宝しそうです。


このページのトップヘ