GitHub のオープンソースクライアントを使用し、サーバー側の TLS 検証を行うクラウドゲートウェイを経由して、GB/T 32960 準拠の車両デバイスを IoT Platform に接続します。
前提条件
-
Exclusive Enterprise Edition インスタンスが利用可能であること。この例では、中国 (上海) リージョンを使用します。
-
カスタム証明書が準備されていること。
必要なファイル:ルート証明書 (
root-ca.crt)、サーバー秘密鍵 (server.key)、およびサーバー証明書 (server.crt)。これらは OpenSSL で生成します。カスタム証明書の生成
背景
IoT Platform のクラウドゲートウェイは、TCP または TLS 経由での GB/T 32960 接続をサポートしています。TLS の使用が推奨されており、サーバー側の単方向検証、デバイス側の OCSP、および相互 TLS をサポートしています。
この例では、サーバー側の単方向検証を行う TLS を使用します。
プロトコルの詳細については、「GB/T 32960 プロトコルクラウドゲートウェイの概要」をご参照ください。
GB/T 32960 オープンソースクライアントは GitHub で入手できます。
環境の準備
-
お使いのオペレーティングシステムに Git と Patch がインストールされていること。
-
Java 開発環境が設定されていること:
-
JDK バージョン: JDK 8
-
統合開発環境 (IDE): IntelliJ IDEA Community Edition
-
ソースコードのダウンロード
デモをクローンし、パッチファイルを適用します:
-
次のコマンドを実行して、
tspデモのリポジトリをクローンします。git clone https://github.com/zhengyishan/tsp.git cd tsp git checkout 5ef2907b7160f74cf4948b641d75fccd50c5dd6a -b demo_branch -
パッチファイル
gb32960.patchをtspディレクトリにダウンロードします。 -
次のコマンドを実行して、
tspデモファイルにパッチを適用します。patch -p1 < gb32960.patch
クラウドゲートウェイとデバイスの作成
-
IoT Platform コンソールにログインします。
-
コンソールの左上隅で、IoT Platform インスタンスが配置されているリージョンを選択します。
-
[インスタンス詳細] ページで、対象の Exclusive Enterprise Edition インスタンスをクリックします。
-
左側のナビゲーションペインで、[デバイス > クラウドゲートウェイ] を選択し、[クラウドゲートウェイの追加] をクリックします。
-
表示されるダイアログボックスで、[サーバー証明書の秘密鍵] を
server.keyファイルの内容に設定し、[サーバー証明書] を [server.crt] ファイルの内容に設定します。パラメーターの詳細については、「クラウドゲートウェイの追加」をご参照ください。
[クラウドゲートウェイ名] を
GBtestに、[プロトコル] を [GB/T 32960] に、[カスタムポート番号] を8999に設定します。[認証タイプ] で [サーバー側の単方向検証] を、[トランスポートプロトコル] で [TLS] を選択します。[デバイス X.509 証明書認証を有効にする] で [いいえ] を、[OCSP を有効にする] で [無効] を選択します。 -
[OK] をクリックします。
-
クラウドゲートウェイが作成されたら、ゲートウェイリストでそのゲートウェイを見つけ、[ゲートウェイ URL] をコピーします。
ゲートウェイ URL の形式は
xxx.igw.iothub.aliyuncs.com (ポート番号: 8999)です。完全な URL を保存してください。
デバイスの追加
-
左側のナビゲーションペインで、[デバイス]>[製品]を選択します。作成したクラウドゲートウェイの製品を探し、[操作]列の[デバイスの管理]をクリックします。
-
[デバイス] ページで、[一括追加] をクリックします。
-
[デバイスの一括追加] ダイアログボックスで、[.csv テンプレートをダウンロード] をクリックします。
ダイアログボックスでは、[プロダクト] はすでにクラウドゲートウェイとして選択されています。ダイアログボックスには、[一括アップロードファイル] フィールドと [ファイルのアップロード] ボタンも表示されます。
-
テンプレートに、[VIN] (例:device10000000001) を入力します。その後、ファイルを
.csv拡張子で保存します。重要[VIN] は車両識別番号です。長さは 17 文字で、文字と数字を含めることができます。
-
デバイスの一括追加ダイアログボックスに戻ります。[ファイルをアップロード] をクリックして先ほど保存したファイルをアップロードし、[OK] をクリックします。
ファイルがアップロードされると、"Parsing complete" というメッセージと [合計デバイス数] が表示されます。解析結果を確認し、[OK] をクリックします。
デバイス ID がインポートされると、IoT Platform は対応するデバイスを作成し、アップロードされた [VIN] の値をデバイスの DeviceName として使用します。
新しいデバイスのステータスは [非アクティブ] です。
デバイスクライアントの開発
デバイス device10000000001 を IoT Platform に接続するための Java クライアントを開発します。
-
IntelliJ IDEA を開き、ダウンロードした [tsp] デモをインポートします。
-
プロジェクトで、ルート証明書ファイル
root-ca.crtを/dyy-gateway-tcu/src/main/resourcesディレクトリにインポートします。 -
プロジェクトで
/dyy-gateway-tcu/src/main/java/com/dyy/tsp/gateway/tcu/config/TcuProperties.javaファイルを開き、デバイス接続パラメーターを変更します。次のパラメーターを実際の値に置き換えます:
// ゲートウェイのドメイン名。TODO: クラウドゲートウェイインスタンスのドメイン名に置き換えてください。 private String gatewayHost = "iot-*******.igw.iothub.aliyuncs.com"; // ゲートウェイのポート。TODO: クラウドゲートウェイインスタンスのポートに置き換えてください。 private Integer gatewayPort = 8999; // TLS を使用するかどうかを指定します。TODO: TCP ダイレクト接続を使用する場合は、false に設定してください。 private boolean useSSL = Boolean.TRUE; // TLS を使用しない場合は、これを無視してください。TLS を使用する場合は、ルート証明書ファイル root-ca.crt のパスを設定します。 private String CA_PATH = "dyy-gateway-tcu/src/main/resources/root-ca.crt"; // 車両識別番号。値は 17 バイト長である必要があります。TODO: 車両の VIN に置き換え、この VIN を使用してコンソールでデバイスを作成してください。 private String vin = "device10000000001";パラメーター
例
説明
gatewayHost
iot-*******.igw.iothub.aliyuncs.comGB/T 32960 プロトコルクラウドゲートウェイのエンドポイントです。
これは、お客様のクラウドゲートウェイの [ゲートウェイ URL] のドメイン名部分です。
gatewayPort
8999クラウドゲートウェイエンドポイントのカスタムポート番号です。デフォルト値:
8999。これは、クラウドゲートウェイの [ゲートウェイ URL] のポート番号部分です。
useSSL
Boolean.TRUETLS を使用して接続するかどうかを指定します。有効な値:
-
Boolean.TRUE(デフォルト):TLS を使用します。 -
Boolean.FALSE:TCP を使用します。
CA_PATH
dyy-gateway-tcu/src/main/resources/root-ca.crtTLS を使用して接続するには、このパラメーターをプロジェクト内の
root-ca.crtファイルのパスに設定します。vin
device10000000001車両識別番号です。これは、作成したクラウドゲートウェイデバイスの [VIN] です。
-
-
/dyy-gateway-tcu/src/main/java/com/dyy/tsp/gateway/tcu/handler/BusinessHandler.javaファイルは、車両のログイン、ハートビート、リアルタイムデータの報告、および車両のログアウトを処理します。このファイルを変更して、カスタム機能を追加します。
デバイスクライアントの実行
-
IntelliJ IDEA で、[ファイル > プロジェクト構造] を選択します。
-
[Project SDK] をバージョン 1.8 に設定し、[適用] をクリックします。
-
[OK] をクリックします。
-
TcuApplication.javaファイル内のメインプログラムを実行します。サーバー側の検証が成功すると、デバイスはオンラインになります。
実行ログの表示
デバイス側の実行ログ
デバイスクライアントは、アップストリームおよびダウンストリームのメッセージを出力します:
-
車両ログインのリクエストメッセージ。メッセージの 3 バイト目と 4 バイト目の
01 feは、車両ログインリクエストを示します。+-------------------------------------------------+ | 0 1 2 3 4 5 6 7 8 9 a b c d e f | +--------+-------------------------------------------------+----------------+ |00000000| 23 23 01 fe 64 65 76 69 63 65 31 30 30 30 30 30 |##..device100000| |00000010| 30 30 30 30 31 01 00 1e 17 05 06 10 23 19 00 01 |00001.......#...| |00000020| 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 36 |1234567890123456| |00000030| 37 38 39 30 00 00 ee |7890... | +--------+-------------------------------------------------+----------------+ -
デバイスログインリクエストに対するサーバーからのレスポンスメッセージ。3 バイト目と 4 バイト目の
01 01は、車両ログインが成功したことを示します。+-------------------------------------------------+ | 0 1 2 3 4 5 6 7 8 9 a b c d e f | +--------+-------------------------------------------------+----------------+ |00000000| 23 23 01 01 64 65 76 69 63 65 31 30 30 30 30 30 |##..device100000| |00000010| 30 30 30 30 31 01 00 1e 17 05 06 10 23 19 00 01 |00001.......#...| |00000020| 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 36 |1234567890123456| |00000030| 37 38 39 30 00 00 11 |7890... | +--------+-------------------------------------------------+----------------+ -
ハートビートを報告するためのメッセージ。3 バイト目と 4 バイト目の
07 01は、メッセージがアップストリームのハートビートであることを示します。+-------------------------------------------------+ | 0 1 2 3 4 5 6 7 8 9 a b c d e f | +--------+-------------------------------------------------+----------------+ |00000000| 23 23 07 01 64 65 76 69 63 65 31 30 30 30 30 30 |##..device100000| |00000010| 30 30 30 30 31 01 00 00 36 |00001...6 | +--------+-------------------------------------------------+----------------+ -
ハートビートメッセージに対するサーバーからのレスポンスメッセージ。3 バイト目と 4 バイト目の
07 01は、メッセージがダウンストリームのハートビートであることを示します。+-------------------------------------------------+ | 0 1 2 3 4 5 6 7 8 9 a b c d e f | +--------+-------------------------------------------------+----------------+ |00000000| 23 23 07 01 64 65 76 69 63 65 31 30 30 30 30 30 |##..device100000| |00000010| 30 30 30 30 31 01 00 00 36 |00001...6 | +--------+-------------------------------------------------+----------------+ -
リアルタイムデータを報告するためのメッセージ。3 バイト目と 4 バイト目の
02 feは、リアルタイムデータ報告を示します。+-------------------------------------------------+ | 0 1 2 3 4 5 6 7 8 9 a b c d e f | +--------+-------------------------------------------------+----------------+ |00000000| 23 23 02 fe 64 65 76 69 63 65 31 30 30 30 30 30 |##..device100000| |00000010| 30 30 30 30 31 01 00 14 17 05 06 10 23 23 08 01 |00001.......##..| |00000020| 01 00 05 00 06 00 04 00 07 01 00 0a df |............. | +--------+-------------------------------------------------+----------------+
クラウド側の実行ログ
IoT Platform コンソールの[メンテナンス > デバイスログ]で、報告されたデバイスデータを確認できます。
[クラウド実行ログ] タブで、[DeviceName]、[TraceId]、または [コンテンツキーワード/MessageId] でフィルタリングします。ログエントリの [表示] をクリックすると、メッセージのトピック、タイムスタンプ、および JSON コンテンツが表示されます。