すべてのプロダクト
Search
ドキュメントセンター

IoT Platform:Python用のPaho MQTTライブラリを使用してデバイスをIoT Platformに接続する

最終更新日:Apr 09, 2025

このトピックでは、Python用のPaho MQTTライブラリを使用してデバイスをIoT Platformに接続し、メッセージングを有効にする方法について説明します。

前提条件

プロダクトとデバイスは、IoT Platformコンソールのインスタンスに作成されます。 デバイス証明書とMQTTエンドポイントが取得されます。 デバイス証明書情報には、ProductKey、DeviceName、およびDeviceSecretが含まれます。 詳細については、以下のトピックをご参照ください。

開発環境の準備

Python 3.6の使用を推奨します。

  • Linux

    次のコマンドを実行してPythonをインストールします。

    重要

    このトピックでは、共通ユーザーの権限を使用してすべての操作を実行します。 管理者権限を必要とする特定の操作を実行する場合は、sudoコマンドを実行します。

    sudo add-apt-repository ppa:deadsnake /ppa
    sudo apt-getアップデート
    sudo apt-get python3.6をインストールする
    wget https:// bootstrap.pypa.io/get-pip.py
    sudo python3.6 get-pip.py
    python3.6 -m pip install -- アップグレードpip setuptools wheel
    sudo apt-get install python3.6-venv 
  • Windows

    オペレーティングシステムに基づいて、次のいずれかのパッケージをインストールします。

  • macOS

    パッケージpython-3.6.7-macosx10.9.pkgをダウンロードします。

Python用のPaho MQTTライブラリをダウンロードする

Pahoプロジェクトとサポートされているプログラミング言語の詳細については、「Eclipse Paho Downloads」をご参照ください。

次のコマンドを実行して、Python用のPaho MQTTライブラリをインストールします。 詳細については、「Paho-MQTT」をご参照ください。

pip install paho-mqtt

デバイスから IoT Platform への接続

  • MqttSign.pyファイルは、MQTT接続パラメーターを取得するために呼び出される関数を定義します。 デバイスをIoT Platformに接続するには、関数を呼び出す必要があります。

    機能:

    • この関数は、MQTT接続パラメーターusernamepassword、およびmqttClientIdを取得するために使用されます。

    • 入力パラメータ:

      パラメーター

      データ型

      説明

      productKey

      String

      デバイスが属するプロダクトのProductKey。 このパラメーターは、IoT Platformのデバイスを識別するために使用されます。

      deviceName

      String

      デバイスのDeviceName。 このパラメーターは、IoT Platformのデバイスを識別するために使用されます。

      deviceSecret

      String

      デバイスのDeviceSecret。 このパラメーターは、IoT Platformのデバイスを識別するために使用されます。

      clientId

      String

      デバイスのClientID。 デバイスを効率的に識別するために、デバイスのMACアドレスまたはシリアル番号 (SN) をClientIDとして使用することを推奨します。

      timeStamp

      String

      現在の時刻をミリ秒単位で示すタイムスタンプ。 このパラメーターはオプションです。

    • Output parameters:

      パラメーター

      データ型

      説明

      mqttUsername

      String

      MQTT接続を確立するために使用されるユーザー名。

      mqttPassword

      String

      MQTT接続を確立するために使用されるパスワード。

      mqttClientId

      String

      MQTTクライアントのID。

  1. デバイスをIoT Platformに接続できるプログラムファイルを追加します。

    MQTT接続パラメータを取得するには、MqttSign.pyファイルで関数を呼び出すプログラムを記述する必要があります。

    このセクションでは、開発手順とサンプルコードについて説明します。

    • デバイス情報を指定します。

      # デバイス情報を設定し、プロダクトキー、デバイス名、デバイスシークレットを含めます
      productKey = "a1LhUsK ***"
      deviceName = "python ***"
      deviceSecret = "bdd043d193782d11 ***"
      
      # settimestamp、clientid、サブスクライブトピック、およびパブリッシュトピック
      timeStamp = str((int(round(time.time() * 1000))))
      clientId = "192.168.****"
      subTopic = "/" + productKey + "/" + deviceName + "/user/get"
      pubTopic = "/" + productKey + "/" + deviceName + "/user/update" 
    • MQTT接続情報を指定します。

      MqttSign.pyファイルでcalculate_sign_time関数を呼び出します。 この関数は、deviceSecrettimeStampclientIdproductKey、およびdeviceNameの入力パラメーターの値に基づいて、mqttUsernamemqttPassword、およびmqttClientIdパラメーターを返します。

      この例では、トランスポート層セキュリティ (TLS) ベースのTCP接続が確立される。 接続パラメーターを設定するには、ルート証明書のダウンロードが必要です。

      # setホスト、ポート
      host = productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com"
      # instanceId = "***"
      # host = instanceId + ".mqtt.iothub.aliyuncs.com"
      port = 1883
      
      # set tls crt、keepalive
      tls_crt = "root.crt"
      keepAlive = 300
      
      # ログイン認証情報を計算し、接続オプションに設定します
      m = AuthIfo()
      m.calculate_sign_time(productKey, deviceName, deviceSecret, clientId, timeStamp)
      client = mqtt.Client(m.mqttClientId)
      client.us ername_pw_set(username=m.mqttUsername, password=m.mqttPassword)
      client.tls_set(tls_crt) 
      説明
      • 旧バージョンのパブリックインスタンスを使用する場合は、host = productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com" のcn-shanghaiをデバイスが存在するリージョンのIDに置き換えます。 リージョンIDの形式の詳細については、「サポートされているリージョン」をご参照ください。

      • 新しいバージョンのパブリックインスタンスまたはEnterprise Editionインスタンスを使用する場合は、host = instanceId + ".mqtt.iothub.aliyuncs.com" のinstanceIdをインスタンスのIDに置き換えます。

        MQTTエンドポイントを取得するには、次の手順を実行します。IoT Platformコンソールにログインします。 [概要] ページで、管理するインスタンスのカードをクリックします。 MQTTエンドポイントが [インスタンスの詳細] ページに表示されます。 詳細については、「インスタンスのエンドポイントの表示」をご参照ください。

        IoT Platformインスタンスの詳細については、「概要」をご参照ください。

    • Connect() 関数を呼び出して、デバイスをIoT Platformに接続します。

      def on_connect (クライアント、userdata、フラグ、rc):
          rc === 0の場合:
              プリント ("connect success!")
          else:
              print("connect failed... error code is:" + str(rc))
      
      def connect_mqtt():
          client.on_connect = on_connect
          client.connect (ホスト、ポート、keepAlive)
          戻りクライアント 
    • メッセージを発行するには、Publish() 関数を呼び出します。 メッセージをパブリッシュするトピックとメッセージのペイロードを指定する必要があります。

      def publish_message():
          # pubTopicに5つのメッセージを公開します ("/a1LhUsK ****/python ***/user/update")
          範囲のiのため (5):
              message = "ABC" + str(i)
              client.publish(pubTopic, message)
              プリント ("publish msg:" + str(i))
              time.sleep (2) 

      トピックの詳細については、「トピックとは」をご参照ください

    • Subscribe() 関数を呼び出してトピックをサブスクライブし、IoT Platformからメッセージを受信します。

      def subribe_topic ():
          # subTopic("/a1LhUsK ****/python ***/user/get") をサブスクライブし、メッセージの配信をリクエストします
          client.subscribe(subTopic) 

      デバイス、サーバー、およびIoT Platform間の通信方法の詳細については、「概要」をご参照ください。

  2. プロジェクトを実行します。

サンプルコード

コードコンパイルされたサンプルプログラムを実行して、デバイスをIoT Platformに接続します。

  1. リンクからサンプルコードを含むパッケージをダウンロードし、パッケージをaiot-python-demoディレクトリに解凍します。 ディレクトリに含まれるファイルを次の表に示します。

    証明書ファイル

    説明

    MqttSign.py

    このファイルには、MQTT経由でデバイスをIoT Platformに接続するために必要な接続パラメーターを取得するために使用されるコードが含まれています。 ファイルを実行すると、calculate_sign_time関数が呼び出され、mqttUsernamemqttPassword、およびmqttClientIdパラメーターの値が取得されます。

    iot.py

    このファイルには、デバイスをIoT Platformに接続して通信を有効にするために使用されるロジックコードが含まれています。

    root.crt

    IoT Platformのルート証明書。 この証明書は、デバイスをIoT Platformに接続するために必要です。

  2. iot.pyファイルで、デバイス情報をデバイス情報に置き換えます。

    • productKeydeviceName、およびdeviceSecretパラメーターの値をデバイス証明書情報に置き換えます。

      # デバイス情報を設定し、プロダクトキー、デバイス名、デバイスシークレットを含めます
      productKey = "a1LhUsK ***"
      deviceName = "python ***"
      deviceSecret = "bdd043d193782d11 ***" 
    • オプションです。 timeStampパラメーターとclientIdパラメーターの値を置き換えます。 clientIdパラメーターの値をデバイスのMACアドレスまたはSNに置き換えることができます。

      説明

      値を置き換えない場合でも、デバイスをIoT Platformに接続できます。 実際のシナリオでは、パラメーターの値を実際の値に置き換えることを推奨します。

    • 置き換えます。実際のMQTTエンドポイントでhost = productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com" にiot-as-mqtt.cn-shanghai.aliyuncs.comします。

      詳細については、このトピックの「デバイスをIoT Platformに接続する」セクションの手順2を参照してください。

  3. iot.pyファイルを実行します。

    ファイルを実行すると、次のローカルログが生成されます。

    Connect aliyun IoT Cloud Sucess
    購読トピック: /a1LhUsK ***/python ***/user/get
    publish msg: 0
    パブリッシュmsg: ABC0
    publish msg: 1
    パブリッシュmsg: ABC1
    publish msg: 2
    パブリッシュmsg: ABC2
    publish msg: 3
    パブリッシュmsg: ABC3
    publish msg: 4
    パブリッシュmsg: ABC4 

    IoT Platform コンソールにログインします。 インスタンス上のデバイスのステータスとログを表示できます。

    • [デバイス] > [デバイス] を選択します。 [デバイス] ページには、デバイスがオンライン状態であることが表示されます。

    • [メンテナンス] > [デバイスログ] を選択します。 次に、[クラウド実行ログ] または [デバイスローカルログ] タブをクリックしてログを表示します。 詳細については、「IoT Platformログ」および「ローカルデバイスログ」をご参照ください。

エラーコード

デバイスがMQTT経由でIoT Platformに接続できない場合は、エラーコードに基づいて問題をトラブルシューティングできます。 詳細については、「トラブルシューティング」をご参照ください。