接入示例(一方认证)

本文以使用Github开源工程为例,介绍使用GB/T 32960协议的车辆设备,通过物联网平台云网关接入阿里云物联网平台进行通信。

前提条件

  • 已购买尊享型企业版实例。

    本示例购买华东2(上海)地域的尊享型实例。具体操作,请参见购买企业版实例

  • 自定义证书。

    本文示例需自定义证书包含:根证书root-ca.crt、服务端证书私钥server.key和服务端证书server.crt

    您可以使用OpenSSL工具生成自定义证书,制作方法,请参见生成自定义证书

背景信息

物联网平台提供GB/T 32960协议云网关功能,支持通过TCP(安全性低,不推荐)和TLS两种方式接入设备。采用TLS方式接入时,支持使用服务端单向认证、设备端OCSP、设备和服务端双向安全接入等能力。

本文使用一方认证的TLS方式,介绍GB/T 32960协议设备的接入示例。

GB/T 32960协议云网关设备认证和通信说明,请参见GB/T 32960协议云网关概述

Github上已有GB/T 32960协议客户端的开源代码。具体内容,请参见Github的开源项目

准备环境

  • 本示例使用Git命令下载开源代码,并使用Patch命令进行补丁。因此,您的操作系统需安装支持使用Git和Patch命令。

  • 本示例使用Java语言开发设备程序,准备Java开发环境如下:

下载开源代码

本示例对开源的Demo做了简化,需要打上Patch文件。具体操作如下:

  1. 执行以下命令,获取到Demo文件tsp

    git clone https://github.com/zhengyishan/tsp.git
    cd tsp
    git checkout 5ef2907b7160f74cf4948b641d75fccd50c5dd6a -b demo_branch
  2. 下载Patch文件gb32960.patch,保存在Demo文件tsp目录下。

  3. 继续执行以下命令,完成Demo文件tsp补丁。

    patch -p1 < gb32960.patch

创建云网关产品和设备

  1. 登录物联网平台控制台

  2. 在控制台左上方,选择物联网平台所在地域。

  3. 实例概览页面,单击目标尊享型实例。

  4. 在左侧导航栏,选择设备管理>云网关,单击添加云网关

  5. 在对话框中配置如下参数,如下图所示,服务端证书私钥server.key服务端证书server.crt

    参数详细说明,请参见添加云网关

    image..png
  6. 单击确认

  7. 云网关创建完成后,在云网关列表,复制网关URL保存。

    image..png

添加云网关设备

  1. 在左侧导航栏选择设备管理>产品,找到已创建的云网关产品,单击右侧操作列的管理设备

  2. 设备页面,单击批量添加

  3. 批量添加设备对话框,单击下载.csv模板下载表格模板。

    image..png
  4. 在模板中填写VIN值(例如:device10000000001),然后保存为.csv后缀文件。

    重要

    VIN为车辆识别代码,支持英文字母和数字,长度限制为17个字符。

  5. 回到批量添加设备对话框,单击上传文件,将填好的文件上传至物联网平台控制台,单击确认

    image..png

    设备身份导入成功后,物联网平台会以上传的VIN值,作为设备名称创建对应设备,设备列表显示已创建的设备信息。

    image..png

开发设备端程序

创建设备信息后,需开发设备端程序,将设备接入物联网平台。本示例以接入设备device10000000001为例,使用Java SDK开发设备连接物联网平台。

  1. 打开IntelliJ IDEA,导入已获取的Demo:tsp

  2. 在工程的/dyy-gateway-tcu/src/main/resources路径下导入根证书文件:root-ca.crt

  3. 打开工程的/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,请忽略;如果用到了,请设置根证书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.com

    GB/T 32960协议云网关的接入地址。

    即已创建云网关产品的网关URL中域名。

    gatewayPort

    8999

    云网关接入地址的自定义端口号,默认为8999

    即已创建云网关产品的网关URL中端口号。

    useSSL

    Boolean.TRUE

    是否使用TLS方式接入。取值:

    • Boolean.TRUE(默认):表示使用TLS。

    • Boolean.FALSE:表示使用TCP。

    CA_PATH

    dyy-gateway-tcu/src/main/resources/root-ca.crt

    使用TLS方式接入时,需要设置根证书文件root-ca.crt在工程下的绝对路径。

    vin

    device10000000001

    车辆识别代码,即已创建云网关设备的VIN

  4. 在工程的/dyy-gateway-tcu/src/main/java/com/dyy/tsp/gateway/tcu/handler/BusinessHandler.java文件中,提供了车辆登入、上报心跳、上报实时数据、车辆注销的逻辑代码。您可以修改此文件,实现更多功能。

运行设备程序

  1. 在IntelliJ IDEA中,选择File>Project Structure

  2. 选择Project SDK为1.8 版本,单击Apply

    image.png
  3. 单击OK

  4. 运行文件TcuApplication.java的主程序。

    设备与服务端进行双向认证成功,设备在线。

    image..png

查看运行日志

设备端运行日志

设备程序运行后,会打印设备上下行报文的详细信息:

  • 车辆登入(login)的请求报文,其中报文的第三、第四字节01 fe表示车辆请求登入。

             +-------------------------------------------------+
             |  0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f |
    +--------+-------------------------------------------------+----------------+
    |00000000| 23 23 01 fe 31 32 33 34 35 36 37 38 39 30 31 32 |##..device100000|
    |00000010| 33 34 35 36 37 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...         |
    +--------+-------------------------------------------------+----------------+
  • 服务端对设备login的回复报文,其中报文的第三、第四字节01 01表示车辆登入成功。

             +-------------------------------------------------+
             |  0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f |
    +--------+-------------------------------------------------+----------------+
    |00000000| 23 23 01 01 31 32 33 34 35 36 37 38 39 30 31 32 |##..device100000|
    |00000010| 33 34 35 36 37 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...         |
    +--------+-------------------------------------------------+----------------+
  • 设备上报心跳的报文,其中报文的第三、第四字节07 fe表示该报文为上行的心跳。

             +-------------------------------------------------+
             |  0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f |
    +--------+-------------------------------------------------+----------------+
    |00000000| 23 23 07 01 31 32 33 34 35 36 37 38 39 30 31 32 |##..device100000|
    |00000010| 33 34 35 36 37 01 00 00 36                      |00001...6       |
    +--------+-------------------------------------------------+----------------+
  • 服务端对心跳报文的回复,其中报文的第三、第四字节07 01表示该报文为下行的心跳。

             +-------------------------------------------------+
             |  0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f |
    +--------+-------------------------------------------------+----------------+
    |00000000| 23 23 07 01 31 32 33 34 35 36 37 38 39 30 31 32 |##..device100000|
    |00000010| 33 34 35 36 37 01 00 00 36                      |00001...6       |
    +--------+-------------------------------------------------+----------------+
  • 设备上报实际数据,其中报文的第三、第四字节02 fe表示实时数据上报。

             +-------------------------------------------------+
             |  0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f |
    +--------+-------------------------------------------------+----------------+
    |00000000| 23 23 02 fe 31 32 33 34 35 36 37 38 39 30 31 32 |##..device100000|
    |00000010| 33 34 35 36 37 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          |.............   |
    +--------+-------------------------------------------------+----------------+

云端运行日志

物联网平台控制台实例下的监控运维 > 日志服务页面,查看设备上报数据。

具体操作,请参见云端运行日志

image..png