ここでは、オープンソースとして提供されている MQTT のクライアントツールである mosquitto_pub
と mosquitto_sub
を使用して MQTT を体験する操作を紹介します。
mosquitto_pub および mosquitto_sub をインストールする
Linux の場合は、パッケージマネージャーを使用して mosquitto-clients をインストールします。たとえば、Raspberry Pi の場合は、以下のコマンドでインストールしてください。
$ sudo apt install mosquitto-clients
Windows の場合は、https://mosquitto.org/download/ でインストーラー (例: mosquitto-2.0.20-install-windows-x64.exe) をダウンロードおよびインストールしてください。
mosquitto_pub でトピックにデータを Publish する (送信)
mosquitto_pub
を使用して、以下の設定でデータを Publish (送信) する操作を紹介します。
項目 | 説明 |
---|---|
ホスト名 | beam.soracom.io (Beam の MQTT エントリポイント) |
クライアント ID | 設定なし (Azure IoT Hub など、クライアント ID が必要な場合もあります。詳しくは、Azure IoT Hub または Azure Event Grid にデータを Publish する場合はクライアント ID (-i オプション) を指定してください を参照してください。) |
トピック名 | beamdemo |
データ | Hello, World |
「Beam の MQTT エントリポイントを設定した SIM グループ」に所属する IoT SIM を利用するデバイスで、以下のコマンドを実行します。
$ mosquitto_pub -d -h beam.soracom.io -t beamdemo -m "Hello, World"
Client (null) sending CONNECT Client (null) received CONNACK (0) Client (null) sending PUBLISH (d0, q0, r0, m1, 'beamdemo', ... (12 bytes)) Client (null) sending DISCONNECT
Beam の MQTT エントリポイント
beam.soracom.io
に接続し、MQTT トピックbeamdemo
に対して、メッセージHello, World
が Publish されます。Azure IoT Hub または Azure Event Grid にデータを Publish する場合はクライアント ID (-i オプション) を指定してください
Azure IoT Hub または Azure Event Grid にデータを Publish する場合は、クライアント ID (
mosquitto_pub
の-i
オプション) を指定してください。Azure Event Grid では、クライアント ID (
mosquitto_pub
の-i
オプション) には、利用する Azure Event Grid 名前空間においてユニークな ID を指定してください。以下の例では、
client_authname
に Event Grid にクライアントを作成する で に入力した値 (例:myClient-295012345678901
) を代入し、imei
にクライアントで利用する通信モジュールの IMEI を代入して、クライアント IDclient_id
を構築しています。$ client_authname="myClient-295012345678901" $ imei="123456789011111" $ client_id=${client_authname}-${imei} $ mosquitto_pub -d -h beam.soracom.io -V mqttv311 \ -i ${client_id} -t "exampletopics/topic1" \ -m "Hello from Client via Beam!" Client myClient-295012345678901-123456789011111 sending CONNECT Client myClient-295012345678901-123456789011111 received CONNACK (0) Client myClient-295012345678901-123456789011111 sending PUBLISH (d0, q0, r0, m1, 'exampletopics/topic1', ... (27 bytes)) Client myClient-295012345678901-123456789011111 sending DISCONNECT
Beam の MQTT エントリポイントを使用する場合は、AWS IoT Core のようにデータを送受信する際にデバイス証明書などが必要な場合でも、デバイスではデバイス証明書などを指定する必要はありません。
これは、デバイス証明書などが Beam で付与されるためです。つまり Beam を使用する場合は、デバイスで証明書を保持する必要がありません。証明書を変更する場合は、認証情報ストアに登録する認証情報と、グループ設定を変更します。
Beam の MQTT エントリポイントを使用しない場合は、Raspberry Pi または他のデバイスを接続する の説明に従って、以下のようにデバイスが保持するデバイス証明書などを指定してください。
$ mosquitto_pub --cafile rootCA.pem \ --cert cert.pem \ --key thing-private-key.pem \ -h ${default_endpoint} -p 8883 \ -q 1 -d -t beamdemo -i clientid2 -m "Hello, World"
証明書を変更する場合は、デバイスが保持するデバイス証明書などを更新してください。
mosquitto_sub でトピックを Subscribe する (受信)
mosquitto_sub
を使用して、以下の設定でトピックを Subscribe (受信) する操作を紹介します。
項目 | 説明 |
---|---|
ホスト名 | beam.soracom.io |
クライアント ID | 設定なし (Azure IoT Hub など、クライアント ID が必要な場合もあります。詳しくは、Azure IoT Hub または Azure Event Grid のトピックを Subscribe する場合はクライアント ID (-i オプション) を指定してください を参照してください。) |
トピック名 | beamdemo |
Beam の MQTT エントリポイントを設定した SIM グループに所属する IoT SIM を利用するデバイスで、以下のコマンドを実行します。
$ mosquitto_sub -d -h beam.soracom.io -t beamdemo
Client mosq-FyNf82gCIce1UkNebM sending CONNECT Client mosq-FyNf82gCIce1UkNebM received CONNACK (0) Client mosq-FyNf82gCIce1UkNebM sending SUBSCRIBE (Mid: 1, Topic: beamdemo, QoS: 0, Options: 0x00) Client mosq-FyNf82gCIce1UkNebM received SUBACK Subscribed (mid: 1): 0
トピックの Subscribe が開始されます。
Azure IoT Hub または Azure Event Grid のトピックを Subscribe する場合はクライアント ID (-i オプション) を指定してください
Azure IoT Hub または Azure Event Grid のトピックを Subscribe する場合は、クライアント ID (
mosquitto_sub
の-i
オプション) を指定してください。Azure Event Grid では、クライアント ID (
mosquitto_sub
の-i
オプション) には、利用する Azure Event Grid 名前空間においてユニークな ID を指定してください。以下の例では、
client_authname
に Event Grid にクライアントを作成する で に入力した値 (例:myClient-295012345678901
) を代入し、imei
にクライアントで利用する通信モジュールの IMEI を代入して、クライアント IDclient_id
を構築しています。$ client_authname="myClient-295012345678902" $ imei="123456789022222" $ client_id=${client_authname}-${imei} $ mosquitto_sub -d -h beam.soracom.io -V mqttv311 \ -i ${client_id} -t "exampletopics/topic1" Client myClient-295012345678902-123456789022222 sending CONNECT Client myClient-295012345678902-123456789022222 received CONNACK (0) Client myClient-295012345678902-123456789022222 sending SUBSCRIBE (Mid: 1, Topic: exampletopics/topic1, QoS: 0) Client myClient-295012345678902-123456789022222 received SUBACK Subscribed (mid: 1): 0 Client myClient-295012345678902-123456789022222 sending PINGREQ Client myClient-295012345678902-123456789022222 received PINGRESP
接続先の MQTT ブローカーによってはコネクションが切断されたりエラーになったりする場合があります
接続先の MQTT ブローカーがサポートしている QoS を指定してください。サポートしていない QoS を指定した場合、コネクションが切断されたりエラーになったりする場合があります。たとえば、Azure IoT Hub にデータを送信する場合は、
-q 1
(QoS 1) を指定します。MQTT ブローカーによってはユーザー名 (-u オプション) とパスワード (-P オプション) を指定してください
たとえば、MQTTS テストサーバーを利用する場合は、以下のユーザー名とパスワードを指定してください。
項目 説明 ホスト名 beamtest.soracom.io:8883
トピック名 test
ユーザー名 beamuser
パスワード passwd
$ mosquitto_sub -h beamtest.soracom.io -p 8883 -u beamuser -P passwd -t "test"
ほかのデバイスで、Beam の MQTT エントリポイント
beam.soracom.io
に接続し、MQTT トピックbeamdemo
に対して、データを Publish します。データを Publish する操作について詳しくは、以下のページを参照してください。
mosquitto_pub
で Publish する: mosquitto_pub でトピックにデータを Publish する (送信)- AWS IoT Core を利用する場合は、AWS IoT Core の MQTT テストクライアントで Publish する: AWS IoT Core の MQTT テストクライアントを利用してデータを Publish する (送信)
- Azure IoT Hub を利用する場合は、IoT Hub からデータを Publish する: ステップ 4: デバイスでトピックを Subscribe する (受信)
mosquitto_sub
を実行したデバイスにデータが届き、以下のように表示されます。Client mosq-FyNf82gCIce1UkNebM received PUBLISH (d0, q0, r0, m0, 'beamdemo', ... (xx bytes)) Hello, World
デバイスでは、メッセージを受信していないときに以下のように繰り返し表示されます。
Client (null) sending PINGREQ
Client (null) received PINGRESP
Client (null) sending PINGREQ
Client (null) received PINGRESP
: