このトピックでは、C# 用のPaho Message Queuing Telemetry Transport (MQTT) ライブラリを使用してIoT Platformに接続し、通信する方法について説明します。
前提条件
プロダクトとデバイスは、IoT Platformコンソールで作成されます。 LightSwitchプロパティは、[製品の詳細] ページの [機能の定義] タブで定義します。
背景情報
Paho MQTT for C# のオープンソースコードには、Visual Studioソリューションが含まれています。 ソリューション内の各プロジェクトを使用して、指定のライブラリを生成できます。. NETプラットフォーム
この例では、コンソールアプリケーションプロジェクトがソリューションに作成され、Paho MQTTライブラリを使用してIoT Platformに接続します。
開発環境の準備
この例では、開発環境は次のコンポーネントで構成されています。
オペレーティングシステム: Windows 10
統合開発環境 (IDE): Visual Studio 2019
IDEをインストールするには、次の手順を実行します。
Visual Studio Community 2019をダウンロードし、パッケージを解凍します。
インストールファイルをダブルクリックして、Visual Studio Installerを起動します。 を選択します。. NETデスクトップ開発の後、[インストール] をクリックします。
Paho MQTT C# クライアントをダウンロードする
Paho MQTT for C# ソースコードをダウンロードします。 コードには、M2MMqtt.slnという名前のVisual Studioソリューションファイルが含まれています。 このファイルを使用してデバイスを開発できます。 詳細については、「デバイスをIoT Platformに接続する」をご参照ください。
Pahoソースコードの手順の詳細については、『GitHub』をご参照ください。
このトピックでは、masterブランチを使用してサンプルコードを開発します。 コミットIDはb2e64bc4485721a0bd5ae805d9f4917e8d040e81です。
デバイスから IoT Platform への接続
[MqttSign.cs] をクリックして、Alibaba Cloudが提供するソースコードを表示します。 ソースコードを使用してMQTT接続パラメーターを取得する必要があります。
MqttSign.csファイルは、
MqttSignクラスを指定します。構文
クラスMqttSign説明
このクラスを使用すると、MQTT接続パラメーターusername、password、clientidを取得できます。
メンバー
タイプ
メソッド
公共のbool
compute (String productKey, String deviceName, String deviceSecret)productKey、deviceName、およびdeviceSecretパラメーターに基づいて、username、password、およびclientidパラメーターを計算します。
public文字列
getUsername()usernameパラメーターを取得します。
public文字列
getPassword()passwordパラメーターを取得します。
public文字列
getClientid()clientidパラメーターを取得します。
Visual Studioを開きます。 M2Mqtt.slnという名前のVisual Studioソリューションファイルをインポートし、アプリケーションプロジェクトを作成します。
手順1でダウンロードしたMqttSign.csファイルをアプリケーションプロジェクトにインポートします。
アプリケーションプロジェクトで、デバイスをIoT Platformに接続できるプログラムファイルを追加します。
MqttSign.csファイルでMqttSignクラスを使用するプログラムを記述する必要があります。 これにより、IoT PlatformとのMQTT接続を確立するために使用されるパラメーターを取得できます。
このセクションでは、接続を確立するための開発手順とサンプルコードを提供します。
MQTT接続パラメータを取得します。
MQTT接続パラメーターを取得するには、MqttSign.csファイルのMqttSignクラスを使用します。
文字列productKey = "a1X2bEn ****"; 文字列deviceName = "example1"; 文字列deviceSecret = "ga7XA6KdlEeiPXQPpRbAjOZXwG8y ****"; // MQTT接続パラメータを取得します。 MqttSign sign=新しいMqttSign(); sign.ca (productKey, deviceName, deviceSecret); Console.WriteLine("username: " + sign.getUsername()); Console.WriteLine("password: " + sign.getPassword()); Console.WriteLine("clientid: " + sign.getClientid());IoT Platformに接続するためのPaho MQTTクライアントを作成します。
// Paho MQTT C# クライアントを使用してIoT Platformに接続します。 int port = 443; String broker = productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com"; MqttClient mqttClient = new MqttClient(broker, port, true, MqttSslProtocols.TLSv1_2, null, null); mqttClient.Connect(sign.getClientid() 、sign.getUsername() 、sign.getPassword()); コンソール。WriteLine("Broker: " + broker + "Connected");説明String broker = productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com";のエンドポイントを変更します。パブリックインスタンスおよびEnterprise Editionインスタンスのエンドポイントとエンドポイントの形式の詳細については、「インスタンスのエンドポイントの表示」をご参照ください。
IoT Platformにデータを送信します。
次のサンプルコードを使用して、LightSwitchプロパティを送信します。
// Paho MQTTを使用してメッセージを公開します。 文字列トピック="/sys/" + productKey + "/" + deviceName + "/thing/event/property/post"; String message = "{\" id\":\" 1\",\" version\":\" 1.0\",\" params\":{\" LightSwitch\":0}"; mqttClient.Publish (トピック, Encoding.UTF8.GetBytes (メッセージ));TSLデータ形式については、「デバイスのプロパティ、イベント、およびサービス」をご参照ください。
カスタムトピックを通信に使用する方法については、「トピック」をご参照ください。
トピックをサブスクライブして、IoT Platformからメッセージを受信します。
次の例は、トピックをサブスクライブする方法を示しています。 IoT Platformは、プロパティが送信された後、トピックへの応答メッセージを返します。
// Paho MQTTを使用してトピックをサブスクライブします。 String topicReply = "/sys/" + productKey + "/" + deviceName + "/thing/event/property/post_reply"; mqttClient.MqttMsgPublishReceived += MqttPostProperty_MqttMsgPublishReceived; mqttClient.Subscribe(new string[] { topicReply }, new byte[] { MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE }); ... private static void MqttPostProperty_MqttMsgPublishReceived(object sender, uPLibrary.Networking.M2Mqtt.Messages.MqttMsgPublishEventArgs e) { Console.WriteLine("返信トピック:" + e. topic); Console.WriteLine("reply payload:" + e.Message.ToString()); }
デバイス、サーバー、およびIoT Platformの通信方法については、「デバイス、IoT platform、およびサーバー間の通信の概要」をご参照ください。
プロジェクトをコンパイルします。
サンプルコード
サンプルコードを使用して、デバイスをIoT Platformに接続できます。
デモパッケージをダウンロードし、パッケージをaiot-csharp-demoディレクトリに解凍します。
aiot-csharp-demo\paho.mqtt.m2mqtt-master\aiot-csharp-demoディレクトリには、デバイスがIoT Platformに接続してプロパティを送信できるようにする完全なプログラムが含まれています。
ファイル
説明
MqttSign.cs
このファイルには、MQTT接続パラメーターの取得に使用できるコードが含まれています。 Program.csファイルを実行すると、MqttSign() 関数が呼び出され、username、password、およびclientIdパラメーターが取得されます。
Program.cs
このファイルには、デバイスがIoT Platformに接続してプロパティを送信できるようにするロジックコードが含まれています。
Visual Studio Community 2019を開き、[プロジェクトまたはソリューションを開く] をクリックして、aiot-csharp-demo\paho.mqtt.m2mqtt-master\M2Mqtt.slnファイルを開きます。
aiot-csharp-demoプロジェクトはVisual Studioにインポートされます。
Program.csファイルで、サンプルデバイス情報をデバイス情報に置き換えます。
productKey、deviceName、およびdeviceSecretパラメーターの値をデバイス証明書情報に置き換えます。
String productKey = "${ProductKey}"; 文字列deviceName = "${DeviceName}"; String deviceSecret = "${DeviceSecret}";String broker = productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com";のエンドポイントを変更します。 詳細については、このトピックの「デバイスをIoT Platformに接続する」セクションの手順4を参照してください。
aiot-csharp-demoファイルをスタートアップ項目として指定し、そのファイルを実行してデバイスをIoT Platformに接続します。

デバイスをIoT Platformに接続した後、接続、データ送信、およびメッセージサブスクリプションに関する情報をローカルログに表示できます。
... ブローカー: a1X2bEn **** .iot-as-mqtt.cn-shanghai.aliyuncs.com Connected ... publish: {"id":"1","version":"1.0","params":{"LightSwitch":0}} ... サブスクライブ: /sys/a1X2bEn ****/example1/thing/event/property/post_reply ...IoT Platformコンソールで、デバイスのステータスとログを表示できます。
を選択します。 [デバイス] ページには、デバイスがオンライン状態であることが表示されます。
を選択します。 次に、[クラウド実行ログ] または [デバイスローカルログ] タブをクリックしてログを表示します。 詳細については、「IoT Platformログ」および「ローカルデバイスログ」をご参照ください。
エラーコード
デバイスがIoT PlatformへのMQTT接続を確立できない場合は、エラーコードに基づいて問題をトラブルシューティングできます。 詳細については、「トラブルシューティング」をご参照ください。