自分のPCをMQTTClientにするツール:MQTT.fx
自分のPCをMQTTClientにするツール:MQTT.fx
モノから送られたMQTTPublish をWEBアプリで受取れと言われても「そもそも送信Deviceがない」という事が起こります。理由は明確で「Deviceもサービス開始に合わせて製造している」からです。
この場合、モノから送られる内容と同じPublishをしてくれる機器が必要になります。
そんな時に使える道具がMQTT.fxです。
MQTT.fxの特徴
- 接続設定が明確で簡単
- 操作箇所が明瞭でわかりやすい
- JavaScriptを使い通信負荷テスト(連続Publish)も可能
その外にも色々ありそうですが、現時点で重宝したのはこの3点です。
ダウンロードとインストールについて
https://mqttfx.jensd.de/index.php/download
上記サイトから自分のPCに合わせたファイルをダウンロードしインストールします。
上のURLをクリックするとこのページが表示されます。基本的に一番上に最新のバージョンが来ているのでこれをクリックし次のページに飛びます。
このページが分かりにくくアプリにたどり着けない方がいるようです。クリックするのはリリースノートの上にあるMQTT.fxのバーjyン名。下の方のリンクをクリックすると違うアプリにたどり着くので注意してください。
正しく遷移できると左のようなページにたどり着きます。自分のPCにあったものを選んでクリックするとダウンロードが始まります。ちなみに、左はWindows64bitのアプリを選択しています。ダウンロードした実行ファイルをダブルクリックするとインストーラーが起動するので後はお任せしましょう。
MQTT.fx でAmazon AWSIoTへ接続する
インストールされたアプリを実行してみます。
すると【Publish】が選択された状態の画面が出てきますが、ヘッダー以外は操作できない状態になっています。
これはMQTTの特徴が【接続してからPUB/SUBする】というものであるため、まずMQTTBrokerへの接続が必要だからです。
歯車マークから設定を行う
ということで、最初に行う作業はMQTTBrokerへの接続設定です。
設定は歯車マークから行います。
クリックすると下の画面が出てくるので、左の枠の下にある「+」マークをクリックします。
【New Profile】という新規接続設定が用意されるので、わかりやすい名前に変えて設定を記載していきます。
画像はAmazonのAWS IoTを利用する際の設定サンプルです。
127.123.234.98 とIPが入っている個所はアマゾンのエンドポイントが入るため、実際には【********.リージョン.amazonaws.com】のような値が入ることになります。
AWSIoTの場合、ポートは(どのRegionでも)共通で【8883】です。
・CA File: root.pem
・Client Certification File: (CLIENT ID)-certificate.pem.crt
・Client Key File: (CLIENT ID)-private.pem.key
PEM ファイルの場合は、 PEM Formatted にチェックを入れるのを忘れないようにしましょう。
設定が出来たらOKを押して接続情報を保存します。
これでProfile 追加され、次回からはドロップダウンで選択してConnectボタンを押せば接続できるようになります。
MQTT 接続開始
接続情報の登録でクリックした歯車マークの左右が接続に使うパーツです。
まずは左側のセレクトボックスで 接続先のProfile を選択します。
そして【 Connect 】 ボタンをクリック。
接続が完了すると右側の〇に緑色になり、失敗すると赤色になります。
MQTT Publich
接続が成功し〇が緑色になっていると、Publichに入力ができるようになります。
操作は簡単で、送信したい情報を記載してPUBするだけです。
MQTT Subscribe
Sunscribeでは監視しているtopicについて MQTTBroker 経由で値を取得します。
MQTT.fxでは複数のtopic監視も可能です。
MQTT Scripts
大量のPUBに耐えられるかなどの実験にはclick連打というわけにはいきません。
そこで活躍するのがJavaScriptによるPUB命令です。
今回の現場ではこの機能がとても役立ちました。
1 |
C:\Users\ユーザー\AppData\Local\MQTT-FX\scripts |
この中に次のようなファイル名ルールでJavaScriptでコードを書きます。
▼ファイル名サンプル
02__Publich_Oregon_Test.js
03__Publich_Tokyo_Test.js
▼コードサンプル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
var Thread = Java.type("java.lang.Thread"); function execute(action) { out("Test Script: " + action.getName()); for (var i = 0; i < 10; i++) { if( (i % 3) == 0 ){ var nid = "86443"; }else if( (i % 2) == 0 ){ var nid = "60945"; }else{ var nid = "30465"; } Publich(nid); Thread.sleep(10); } action.setExitCode(0); action.setResultText("done."); out("Test Script: Done"); return action; } function Publich(nid) { out("fountain Connected"); mqttManager.publish("testPablish/"+nid+"/test", '{"time": '+Date.now()+',"id": '+ nid +',"test:test"}'); } function out(message){ output.print(message); } |
これで Topic:testPablish/86443/test などに対して0.01秒間に1回のPublichを実行します。
マジでこれは便利だった。
まとめ
MQTTだいたい片付いてきました。
「全く聞いた事もない」レベルからよくここまで来たものだと…。
バックアップに入ってくださった方々と、ともにゼロから調べた仲間がいなかったらこんな短期間で着地することはなかったと思うと、『チーム開発』って勉強はかどります。
今まで一人で開発してきたので、気づかないうちに既知のルートばかりで動いてたのだろうなぁと実感しました。
いやぁ~修行に出て正解でした。
-
前の記事
MQTTプロトコルってなに?修行中の現場で出てきたIoTの話 2021.06.01
-
次の記事
「Dockerコンテナがうまく起動しない」そんなときにチェックするコマンドまとめ 2021.07.06
コメントを残す