本文以JT/T 808協議雲網關一方認證的方式為例,介紹如何將JT/T 808協議裝置接入物聯網平台。
前提條件
已購買尊享型企業版執行個體。本樣本購買華東2(上海)地區的尊享型執行個體。具體操作,請參見購買企業版執行個體。
背景資訊
物聯網平台的JT/T 808協議雲網關功能支援通過TCP(安全性低,不推薦)和TLS兩種方式接入裝置。採用TLS方式接入時,支援使用服務端單向認證、裝置端OCSP、裝置和服務端雙向安全接入等能力。本文使用一方認證的TLS(推薦)和TCP(不推薦)方式,介紹JT/T 808協議裝置的接入樣本。
準備工作
本文裝置端開發樣本使用開發環境:Ubuntu 22.04版本作業系統。
接入樣本(TLS,推薦)
自訂認證
本文樣本需自訂認證包含:根憑證root-ca.crt、服務端認證私密金鑰server.key和服務端認證server.crt。
您可以使用OpenSSL工具產生自訂認證,製作方法,請參見產生自訂認證。
建立雲網關產品
登入物聯網平台控制台。
在控制台左上方,選擇物聯網平台所在地區。
在執行個體概覽頁面,單擊目標尊享型執行個體。
在左側導覽列,選擇裝置管理>雲網關,單擊添加雲網關。
在對話方塊中配置如下參數,服務端認證私密金鑰為
server.key和服務端認證為server.crt,然後單擊確認。配置參數的詳細說明,請參見建立雲網關產品(JT/T 808)。
雲網關名稱:填寫
JT808接入樣本TLS協議:選擇JT/T 808
自訂連接埠號碼:填寫
7999認證類型:選擇一方認證
傳輸協議:選擇TLS
是否開啟裝置X.509認證認證:選擇否
是否開啟OCSP:選擇不開啟
雲網關建立完成後,在雲網關列表,複製網關URL儲存。
網關URL格式樣本為
iot-xxx.igw.iothub.aliyuncs.com,連接埠號碼為7999。
添加雲網關裝置
在左側導覽列選擇裝置管理>產品,找到已建立的雲網關產品,單擊右側操作列的管理裝置。
在裝置頁面,單擊大量新增。
在大量新增裝置對話方塊,單擊下載.csv模板下載表格模板。
對話方塊中包含產品和批量上傳檔案兩個必要欄位,產品需選擇對應的雲網關產品,批量上傳檔案提供上傳檔案按鈕用於上傳填寫好的模板。
在模板中填寫Manufacturer ID、Terminal Model和Terminal ID,如下圖所示,然後儲存檔案。
參數填寫說明,請參見建立雲網關裝置(JT/T 808)。

回到大量新增裝置對話方塊,單擊上傳檔案,將填好的檔案上傳至物聯網平台控制台,單擊確認。
裝置身份匯入成功後,物聯網平台會以上傳的Manufacturer ID、Terminal Model和Terminal ID值,拼接成
${Manufacturer ID}_${Terminal Model}_${Terminal ID}作為裝置名稱建立對應裝置,裝置列表顯示已建立的裝置資訊。此時裝置列表中顯示已建立的 4 台裝置,裝置狀態均為未啟用。
開發裝置端程式
建立裝置資訊後,需開發裝置端程式,將裝置接入物聯網平台。 物聯網平台提供JT/T 808協議的C語言SDK,本樣本以接入裝置AliyunIoT_TestModel_device1為例,使用 C SDK開發裝置串連物聯網平台。
下載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 = "浙C*****", }; /* TODO: 綁定的手機號 */ static char *moible_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
在物聯網平台添加的雲網關裝置的Manufacturer ID、Terminal Model和Terminal ID。
model
terminal
colour
車牌的顏色、車牌號,及裝置所屬使用者的手機號。車牌的顏色、車牌號取值符合JT/T 808的2019版本協議要求。
lisence
moible_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 註冊成功(擷取 token)、第二次 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返回到物聯網平台控制台的對應執行個體下,在左側導覽列選擇裝置管理 > 裝置,找到目標裝置,查看裝置狀態。裝置狀態顯示為線上,則表示裝置與物聯網平台成功串連。
在左側導覽列選擇監控營運 > Log Service,選擇目標產品,查看裝置到雲訊息。
在雲端作業記錄頁簽下,篩選 DeviceName 為 AliyunIoT_TestModel_device1,可看到多條業務類型為裝置到雲訊息的日誌記錄,狀態代碼均為200,表示訊息成功發布至 Topic
$JT808/AliyunIoT/TestModel/device1/up(QoS=0)。
接入樣本(TCP,不推薦)
建立雲網關產品和裝置
建立雲網關產品(JT/T 808):在添加雲網關對話方塊中配置參數,單擊確認。
雲網關名稱:輸入
JT808接入樣本協議:選擇JT/T 808
自訂連接埠號碼:輸入
7999認證類型:選擇一方認證
傳輸協議:選擇TCP
雲網關建立完成後,在雲網關列表,複製網關URL儲存。
網關URL格式樣本為
iot-xxx.igw.iothub.aliyuncs.com,連接埠號碼為7999。建立雲網關裝置(JT/T 808):添加裝置如下所示。

開發裝置端程式
物聯網平台提供JT/T 808協議的C語言SDK,本樣本以接入裝置AliyunIoT_TestModel_device1為例,使用 C SDK開發裝置串連物聯網平台。
下載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 = "浙A*****", }; /* TODO: 綁定的手機號 */ static char *moible_num = "1**********"; /* TODO: 替換為雲網關存取點網域名稱和連接埠 */ static char *host = "iot-0******v-0****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您可返回到物聯網平台控制台的對應執行個體下,查看裝置狀態和通訊日誌。