本文以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返回到物联网平台控制台的对应实例下,在左侧导航栏选择设备管理 > 设备,找到目标设备,查看设备状态。设备状态显示为在线,则表示设备与物联网平台成功连接。
在左侧导航栏选择监控运维 > 日志服务,选择目标产品,查看设备到云消息。
在云端运行日志页签下,筛选 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您可返回到物联网平台控制台的对应实例下,查看设备状态和通信日志。