このトピックでは、クラウドゲートウェイの片方向認証を使用して、JT/T 808 プロトコルデバイスを IoT Platform に接続する方法について説明します。
前提条件
Premium Edition のエンタープライズインスタンスを購入しておく必要があります。 この例では、中国 (上海) リージョンにある Premium Edition インスタンスを使用します。 詳細については、「エンタープライズインスタンスの購入」をご参照ください。
背景情報
IoT Platform の JT/T 808 プロトコルクラウドゲートウェイ機能を使用すると、TCP (セキュリティが低いため非推奨) または TLS を使用してデバイスを接続できます。 TLS を使用する場合、サーバー側の片方向認証、デバイス側の OCSP、デバイスとサーバー間の安全な双方向アクセスなどの機能を使用できます。 このトピックでは、TLS (推奨) および TCP (非推奨) を使用した片方向認証で、JT/T 808 プロトコルデバイスを接続する方法について説明します。
事前準備
このトピックのデバイス側開発例では、次の開発環境を使用します: Ubuntu 22.04 オペレーティングシステム。
接続例 (TLS、推奨)
カスタム証明書
この例では、ルート証明書 (root-ca.crt)、サーバー証明書の秘密鍵 (server.key)、サーバー証明書 (server.crt) などのカスタム証明書が必要です。
OpenSSL を使用してカスタム証明書を生成できます。 詳細については、「カスタム証明書の生成」をご参照ください。
クラウドゲートウェイプロダクトの作成
IoT Platform コンソール にログインします。
コンソールの左上隅で、IoT Platform インスタンスが配置されているリージョンを選択します。
[インスタンス概要] ページで、対象の Premium Edition インスタンスをクリックします。
左側のナビゲーションペインで、[デバイス管理] > [クラウドゲートウェイ] を選択し、[クラウドゲートウェイの追加] をクリックします。
表示されたダイアログボックスで、パラメーターを設定します。[サーバー証明書の秘密鍵] を
server.keyに、[サーバー証明書] をserver.crtに設定します。次に、[OK] をクリックします。パラメーターの詳細については、「クラウドゲートウェイプロダクトの作成 (JT/T 808)」をご参照ください。
[ゲートウェイ名]:
JT808接入示例TLSを入力します。[プロトコル]: [JT/T 808] を選択します。
[カスタムポート番号]:
7999を入力します。[認証タイプ]: [一方向認証] を選択します。
[トランスポートプロトコル]: [TLS] を選択します。
[デバイス X.509 証明書認証]: [いいえ] を選択します。
[OCSP の有効化]: [無効] を選択します。
クラウドゲートウェイが作成されたら、クラウドゲートウェイリストでそれを見つけ、[ゲートウェイ URL] をコピーして保存します。
ゲートウェイ URL の形式は
iot-xxx.igw.iothub.aliyuncs.comで、ポート番号は7999です。
クラウドゲートウェイデバイスの追加
左側のナビゲーションペインで、[デバイス管理] > [製品]を選択します。作成したクラウドゲートウェイ製品を見つけ、[アクション] 列の [デバイスの管理] をクリックします。
[デバイス] ページで、[デバイスの一括追加] をクリックします。
[デバイスの一括追加] ダイアログボックスで、[.csv テンプレートのダウンロード] をクリックしてテンプレートファイルをダウンロードします。
ダイアログボックスで、[製品] をクラウドゲートウェイに設定します。[バッチアップロードファイル] セクションで、[ファイルをアップロード] をクリックして、記入した CSV テンプレートをアップロードします。
テンプレートに、次の図に示すようにメーカー ID、端末モデル、端末 ID を入力します。 次に、ファイルを保存します。
パラメーターの記入方法については、「クラウドゲートウェイデバイスの作成 (JT/T 808)」をご参照ください。

デバイスの一括追加ダイアログボックスに戻り、[ファイルアップロード] をクリックしてファイルを IoT Platform コンソールにアップロードしてから、[OK] をクリックします。
デバイス ID がインポートされると、IoT Platform は、アップロードされた メーカー ID、端末モデル、端末 ID の値を
${メーカー ID}_${端末モデル}_${端末 ID}の形式で連結したものをデバイス名として、デバイスを作成します。作成されたデバイスはデバイスリストに表示されます。デバイスが作成されると、すべてのデバイスのステータスは [非アクティブ] になります。
デバイス側プログラムの開発
デバイスを作成した後、デバイス側プログラムを開発してデバイスを IoT Platform に接続します。 IoT Platform は、JT/T 808 プロトコル用の C 言語のソフトウェア開発キット (SDK) を提供しています。 この例では、C SDK を使用して、[AliyunIoT_TestModel_device1] デバイスを IoT Platform に接続するプログラムを開発します。
JT/T 808 プロトコル用の C 言語 SDK をダウンロード し、ファイルを解凍して
jt808-c-sdkフォルダーを取得します。jt808-c-sdk/jt808_tls_demo.cファイルで、デバイスの接続情報と認証情報を変更します。説明jt808_tls_demo.cプログラムファイルは、TLS を使用したデバイス接続の開発に使用されます。...... /* TODO: プレースホルダーを、省、市、メーカー、モデル、端末 ID、色、ナンバープレート番号などの実際のデバイス情報に置き換えます。 */ static jt808_register_t info = { .province = 0x1234, .city = 0x4567, .manufacturer = "AliyunIoT", .model = "TestModel", .terminal = "device1", .colour = 1, .lisence = "ZheC*****", }; /* TODO: 紐付けられた携帯電話番号 */ static char *mobile_num = "1*********8"; /* TODO: プレースホルダーを、クラウドゲートウェイエンドポイントのドメイン名とポートに置き換えます。 */ static char *host = "iot-0******.igw.iothub.aliyuncs.com"; static uint16_t port = 7999; /* エンドポイントのカスタムルート証明書 */ const char *jt808_ca_cert = \ { \ "-----BEGIN CERTIFICATE-----\r\n" "MIIDR*************************************************ZIhvcNAQEL\r\n" "BQAwM*************************************************ANBgNVBAMM\r\n" "BklvV*************************************************MxCzAJBgNV\r\n" "BAYTA*************************************************QgQ0EwggEi\r\n" "MA0GC*************************************************S8fWxBF+lw\r\n" "8GKH7*************************************************3Xco/COMjP\r\n" "Q69QH*************************************************wuYc0WMjlS\r\n" "cNO7G*************************************************BABPEIJeLR\r\n" "c6rJ7*************************************************F8nDOm0kUd\r\n" "kvAdK*************************************************t6BEh9AgMB\r\n" "AAGjU*************************************************NVHSMEGDAW\r\n" "gBT4S*************************************************0GCSqGSIb3\r\n" "DQEBC*************************************************+I42UNjbJa\r\n" "ZP9bn*************************************************G+S/Tv6BEn\r\n" "2v1/V*************************************************zNWlwapdvp\r\n" "DRMmf*************************************************Vh/FVBa7gn\r\n" "9DWlU*************************************************AGz0HkVQq6\r\n" "Ks4UI***************************Vzd+\r\n" "-----END CERTIFICATE-----\r\n" }; ......パラメーター
説明
province
デバイスが配置されている省と市。 値は JT/T 808-2019 プロトコル に準拠している必要があります。
city
manufacturer
IoT Platform コンソールで追加したクラウドゲートウェイデバイスのメーカー ID、端末モデル、端末 ID。
model
terminal
colour
ナンバープレートの色、ナンバープレート番号、およびデバイス所有者の携帯電話番号。 ナンバープレートの色と番号の値は、JT/T 808-2019 プロトコル に準拠している必要があります。
lisence
mobile_num
host
JT/T 808 プロトコルクラウドゲートウェイのエンドポイントは、お客様が作成したクラウドゲートウェイ製品の [ゲートウェイ URL] のドメイン名部分です。
port
カスタムポート番号。 デフォルト値は
7999です。jt808_ca_cert
ルート証明書
root-ca.crtの内容。Ubuntu オペレーティングシステムにログインし、変更した
jt808-c-sdkフォルダーをアップロードします。jt808-c-sdk プロジェクトのディレクトリ構造は次のとおりです。
jt808-c-sdk ├── core ├── demos ├── external ├── jt808 ├── output ├── portfiles ├── LICENSE └── Makefileルートディレクトリ
/jt808-c-sdkで、makeコマンドを実行してサンプルプログラムをコンパイルします。make clean make生成されたサンプルプログラム
jt808-tls-demoは./outputディレクトリに保存されます。サンプルプログラムを実行します。
./output/jt808-tls-demo正常に実行されると、ターミナルに次の例のようなログが出力されます。 主なマイルストーンには、最初の TLS 接続の確立、JT808 登録の成功 (トークンの取得)、2 番目の TLS 接続の確立、JT808 認証の成功、およびその後のハートビート応答が含まれます。
establish tcp connection with server(host='iot-xxx, xxx igw.iothub.aliyuncs.com', port=[7999]) success to establish tcp, fd=5 local port: 52448 [1678871231.212][LK-1000] establish mbedtls connection with server(host='iot-xxx xxx igw.iothub.aliyuncs.com', port=[7999]) [1678871231.641][LK-1000] success to establish mbedtls connection, (cost 39791 bytes in total, max used 42651 bytes) [LK-1100] < 7E xxx 78 | xxx x [LK-1100] < 00 xxx 56 | xxx V [LK-1100] < 30 xxx 52 | xxx R [LK-1100] < 70 xxx 41 | xxx A [LK-1100] < 31 xxx 51 | xxx Q [LK-1100] < 31 xxx 4E | xxx N [LK-1100] < 6A xxx | jMzY=.~ [1678871231.687][LK-0000] aiot_jt808_register successインスタンスの IoT Platform コンソール に戻ります。左側のナビゲーションペインで、[デバイス管理] > [デバイス] を選択します。対象のデバイスを見つけ、そのステータスを確認します。デバイスのステータスが [オンライン] の場合、デバイスは IoT Platform に接続されています。
左側のナビゲーションペインで、[監視 & 運用保守 > Simple Log Service] を選択します。対象の製品を選択し、[デバイスからクラウドへのメッセージ] を表示します。
[クラウド操作ログ] タブで、DeviceName
AliyunIoT_TestModel_device1で絞り込みます。メッセージがトピック$JT808/AliyunIoT/TestModel/device1/up(QoS=0) に正常に発行されたことを示す、業務タイプが [デバイスからクラウドへのメッセージ]、ステータスコードが 200 の複数のログエントリを確認できます。
接続例 (TCP、非推奨)
クラウドゲートウェイプロダクトとデバイスの作成
クラウドゲートウェイ製品 (JT/T 808) を作成します。[クラウドゲートウェイの追加] ダイアログボックスで、パラメーターを設定し、[OK] をクリックします。
[ゲートウェイ名]:
JT808接入示例を入力します。[プロトコル]:[JT/T 808] を選択します。
[カスタムポート番号]:
7999を入力します。[認証タイプ]: [一方向認証] を選択します。
[トランスポートプロトコル]: [TCP] を選択します。
クラウドゲートウェイの作成後、クラウドゲートウェイリストで該当のゲートウェイを見つけ、その[ゲートウェイ URL]をコピーして保存します。
ゲートウェイ URL の形式は
iot-xxx.igw.iothub.aliyuncs.comで、ポート番号は7999です。クラウドゲートウェイデバイスを作成します (JT/T 808)。 次の図に示すようにデバイスを追加します。

デバイス側プログラムの開発
IoT Platform は、JT/T 808 プロトコル用の C 言語のソフトウェア開発キット (SDK) を提供しています。 この例では、C SDK を使用して、[AliyunIoT_TestModel_device1] デバイスを IoT Platform に接続するプログラムを開発します。
JT/T 808 プロトコル用の C 言語 SDK をダウンロード し、ファイルを解凍して
jt808-c-sdkフォルダーを取得します。jt808-c-sdk/jt808_basic_demo.cファイルで、デバイスの接続情報と認証情報を変更します。説明jt808_basic_demo.cプログラムファイルは、TCP を使用したデバイス接続の開発に使用されます。...... /* TODO: プレースホルダーを、省、市、メーカー、モデル、端末 ID、色、ナンバープレート番号などの実際のデバイス情報に置き換えます。 */ static jt808_register_t info = { .province = 0x1234, .city = 0x4567, .manufacturer = "AliyunIoT", .model = "TestModel", .terminal = "device1", .colour = 1, .lisence = "ZheA*****", }; /* TODO: 紐付けられた携帯電話番号 */ static char *mobile_num = "1**********"; /* TODO: プレースホルダーを、クラウドゲートウェイエンドポイントのドメイン名とポートに置き換えます。 */ static char *host = "iot-0******.igw.iothub.aliyuncs.com"; static uint16_t port = 7999; ......Ubuntu オペレーティングシステムにログインし、変更した
jt808-c-sdkフォルダーをアップロードします。ルートディレクトリ
/jt808-c-sdkで、makeコマンドを実行してサンプルプログラムをコンパイルします。make clean make生成されたサンプルプログラム
jt808-basic-demoは./outputディレクトリに保存されます。サンプルプログラムを実行します。
./output/jt808-basic-demo正常に実行されると、デバイスはオンラインになり、データを報告します。 ターミナルに次の例のようなログが出力されます。
root@xxx cZ:/opt/jt808-c-sdk# ./output/jt808-basic-demo establish tcp connection with server(host='iot-xxx.igw.iothub.aliyuncs.com', port=[7999]) success to establish tcp, fd=3 local port: 51018 [LK-1100] < 7xxx '8 | ~. /x [LK-1100] < 0 xxx '8 | .. ix [LK-1100] < 4xxx '6 | Kl >F [LK-1100] < 7xxx \A | p)xxx :J [LK-1100] < 6 xxx '6 | lNxxx >F [LK-1100] < 6 xxx '9 | izxxx NY [LK-1100] < 3 | 0YTU=#~ [1678694981.477][LK-0000] aiot_jt808_register success, token:dGFxxx auth_key: dGlxxx TU= [1678694981.477][LK-1000] adapter_network_deinit establish tcp connection with server(host='iot-0xxx70.igw.iothub.aliyuncs.com', port=[7999]) success to establish tcp, fd=3 local port: 51024 [LK-1100] < 7xxx xxx [LK-1100] < 0xxx xxx [1678694981.622][LK-0000] aiot_jt808_auth success [LK-1100] < 7lxxx xxx [LK-1100] < 0xxx xxx [COMMON_ACK], xxx [LK-1100] < 7lxxx xxx [LK-1100] < 0xxx xxx [COMMON_ACK], xxxインスタンスの IoT Platform コンソール に戻り、デバイスのステータスと通信ログを表示できます。