Soracom

Users

スタートガイド
Home スタートガイド SORACOM を体験するためによく使う SaaS およびツール ツールを利用する Getting Started

MQTT クライアントツールを利用する (mosquitto-clients)

ここでは、オープンソースとして提供されている MQTT のクライアントツールである mosquitto_pubmosquitto_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
  1. 「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_authnameEvent Grid にクライアントを作成する[クライアント認証名] に入力した値 (例: myClient-295012345678901) を代入し、imei にクライアントで利用する通信モジュールの IMEI を代入して、クライアント ID client_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
  1. 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_authnameEvent Grid にクライアントを作成する[クライアント認証名] に入力した値 (例: myClient-295012345678901) を代入し、imei にクライアントで利用する通信モジュールの IMEI を代入して、クライアント ID client_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"
    
  2. ほかのデバイスで、Beam の MQTT エントリポイント beam.soracom.io に接続し、MQTT トピック beamdemo に対して、データを Publish します。

    データを Publish する操作について詳しくは、以下のページを参照してください。

    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
    :