独自スクリプトも実行できる!モダンでクールな MQTT クライアント「MQTT X」の紹介

Windows なあなたも Mac なあなたも。クロスプラットフォームでクールな MQTT ライフを送りましょう!
2021.05.17

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

Mac や Windows から MQTT でブローカーに接続する MQTT クライアントは多くの種類があります。今回は「MQTT X」という Cool な GUI クライアントをご紹介したいと思います。

実は以前 GUI のMQTT クライアントを調べた時に「MQTT X」もインストールしていたのですが、そのときは時間がなくデバイス証明書を利用した接続方法が分からず放置していました。

今回改めて調べてみた所、AWS IoT Core への接続方法だけでなく、面白い機能も見つけたので、その内容をご紹介していきたいと思います。

MQTT X とは

下記の環境をサポートするクロスプラットフォームな MQTT クライアントです。

  • Windows
  • Mac
  • Ubuntu
  • Linux

単なるクライアントアプリではなく、様々な認証のサポート、MQTT や WebSocket のサポート、独自スクリプトによるメッセージ処理などユニークな機能を持っている点が特徴です。

インストール

私は Mac を利用しているので、上記のページから dmg ファイルをダウンロードしてインストールします。インストーラの指示に従えばいいので詳細は割愛させていただきます。

AWS IoT Core との接続

AWS IoT Core と接続するために事前にデバイス証明書、秘密鍵、CA証明書をダウンロードしておきます。

01-certs

では、MQTT X を起動して「New Connection」 をクリックします。

02-init

ここで AWS IoT Core との接続情報を入力します。

03-conn-settings

番号 入力箇所 入力内容
1 Name この接続の名前を入れます。適当なもので構いません。
2 Clinent ID MQTT 接続時のClient ID です。デフォルトではツールが自動的に生成したものが入ります。
3 Host 接続する MQTT ブローカーを指定します。ここでは AWS IoT Core のホスト名を設定します。プロトコルは「mqtts」 を選択してください。
4 Port AWS IoT Core の場合は 8883 を指定してください。
5 SSL/TLS 暗号化の設定です。true を選択してください。
6 Certificate self signed を選択してください。
7 SSL Secure 有効にしてください。
8 CA File 事前にダウンロードした CA 証明書のパスを指定してください。フォルダアイコンから指定することができます。
9 Client Certificate File 事前にダウンロードした デバイス証明書のパスを指定してください。
10 Client key file 事前にダウンロードした 秘密鍵のパスを指定してください。

接続設定が終われば、右上の「Connect」 をクリックして接続します。

04-connect

接続できたら下記のような画面が表示されます。

05-connected

動作テストとして、AWS IoT Core にメッセージを Publish してみましょう。事前に AWS IoT Core の画面でトピック topic/sample をSubscribe しておきます。

次に、先程のトピック(topic/sample) を指定して右下の矢印ボタンをクリックすれば Publish できます。

06-publish-from-mqttx

AWS のコンソールでメッセージを確認することができました。

07-aws-test-client-sub

次に、MQTT X でメッセージを受け取ってみます。画面中央の「New Sbscription」 をクリックします。

08-mqttx-sub

先ほどとは別のトピック(topic/sample2)を指定します。QoS も指定できますが今回はデフォルトの「0」のままとします。なお、AWS IoT Core では 「QoS 2」をサポートしていないので注意しましょう。

09-set-sub-topic

それでは、AWS コンソールからPublish してみます。

10-aws-test-client-pub

MQTT X 上でメッセージを受け取ることができました。

11-succeeded-sub-mqttx

メッセージの表示エリアには、「All」「Received」「Published」の3つのボタンがあります。それぞれの内容でメッセージ表示をフィルタリングすることができます。
下記は「Received」で受け取ったメッセージのみ表示しています。

12-filtering-sub

「Published」ならクライアントから送ったメッセージだけ表示できます。

13-filtering-pub

また、同時に他のトピックも設定することができます。

14-add-topic

切断するときは上部にある電源ボタンをクリックします。

15-diconnect

スクリプト機能

MQTT X の独自機能として、送受信するメッセージ(Payload)に対して独自スクリプトによる変換を行うことができます。
この機能を使うと、例えばランダムデータを生成してセンサーやデバイスの模擬データとしてメッセージを送る、といった事ができます。

ただし、2021年5月現在では下記の点に注意が必要です。

  • 対応言語が JavaScript だけであること
  • まだベータ提供であること

利用する場合は、下記画像にあるコードを表す「ボタン」をクリックします。

16-script-function

エディタ画面が開くので、「+」をクリックして新規にエディタを開きます。

20-script

スクリプトを入力できたら右上の「Save」をクリックして保存します。動作を確認したい場合は「Input」 に期待されるJSONデータをセットして「Test」 ボタンをクリックすると、「Output」 画面で MQTT X から Publish されるメッセージを確認することができます。

21-test-script

最初の保存時にスクリプトの名前を指定することができます。保存したスクリプトはプルダウンから選択して後から編集することもできます。

33-save-as

ランダムデータを5秒間隔で Publish してみる

実際の動作確認として、下記のサンプルスクリプトを試してみます。下記は、毎回ランダムな「温度と湿度」を含んだ JSON データを生成して付与します。

function random(min, max) {
  return Math.round(Math.random() * (max - min)) + min
}

function handlePayload(value) {
  let _value = value
  if (typeof value == 'string') {
    _value = JSON.parse(value)
  }
 
  _value.temperature = random(10,30)
  _value.humidity = random(20,40)
  return JSON.stringify(_value, null, 2)
}

execute(handlePayload)

Input データが空({})の場合、生成されるデータのフォーマットは下記になります。

{
  "temperature": 18,
  "humidity": 39,
}

適当な名前でスクリプトを保存してから、右上のメニューから「Use Script」 を選択します。

22-use-script

次の画面で使いたいスクリプトを選択します。また、どのメッセージにスクリプトの処理を適用したいかを選択します。今回は「Published」を選択します。

23-select-script

スクリプトが設定されると、画面右上の「四角いアイコン」が現れます。

24-use-select-mode

この状態で、Publish するとそのタイミングで1度だけメッセージが送られます。今回は5秒間隔で自動的に送信したいと思います。
その場合は、メニューより「Timed message」 を選択します。

25-select-timed-message

送信間隔を聞かれるので適当な時間を設定します。(今回は「5」秒をセット)

26-set-frequency

この状態で適当な Input データを設定して Publish ボタンをクリックすると、5秒間隔にランダムな温度・湿度データが送信されるようになります。

27-publish-by-script

送信を開始すると、メッセージ表示エリアに5秒ごとランダムメッセージが Publish されている様子を見ることができます。

28-published-random-messages

AWS IoT Core 側でもデータを受け取っていることを確認できました。

30-aws-subscrib-from-script-pub

止める場合は、上部の「時計アイコン」をクリックします。

29-clear-timer

その他の機能

ログ

ログ画面で各種ログを確認することができます。

31-logs

言語

言語は「英語」、「中国語」、「日本語」に対応していました。(日本語対応に気が付かず英語表示で使っていました)

31-select-lang

表示デザインとしてテーマが3種類から選択できます。Light がデフォルトで、他に Dark, Night が選択できます。画像は Dark を選択したものです。

32-select-thema-night

画面に表示されているメッセージはメニューから「Clear History」の選択で一括削除することができます。個別に消したい場合は対象メッセージを右クリックして削除できます。

51-delete-and-copy-message

なお、使用したバージョンは「v1.5.4」です。

50-mqttx-info

最後に

普段、簡単に疎通確認するときはMosquittoを使うことが多かったですが「MQTT X」はデザインもモダンで使いやすいと感じました。
特にスクリプト機能については「ダミーデータでちょっと動作確認したい」といった場合に便利に使えるのではないかと思います。

他にもMQTT Broker なども公開されているようなので、今後試してみたいと思います。

以上、どなたかのお役に立てれば幸いです。

参考リンク