Commit 86fff45a2cd9755fd6bd77f64ab34b12b8f67253

Authored by zhaowg
1 parent b5a79ddd

电信IOT插件

... ... @@ -10,6 +10,7 @@
10 10 <version>1.0-SNAPSHOT</version>
11 11 <modules>
12 12 <module>zteits-job</module>
  13 + <module>zteits-nbiot</module>
13 14 </modules>
14 15  
15 16 </project>
16 17 \ No newline at end of file
... ...
zteits-job/src/main/resources/application-dany.properties 0 → 100644
  1 +server.port=8075
  2 +
  3 +#park-datasource
  4 +park-datasource.url=jdbc:mysql://172.19.128.115:3306/zt_park?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
  5 +park-datasource.username=park
  6 +park-datasource.password=MySQL57@123
  7 +
  8 +#order-datasource
  9 +order-datasource.driverClassName=com.mysql.jdbc.Driver
  10 +order-datasource.url=jdbc:mysql://172.19.128.115/zt_order_n?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
  11 +order-datasource.username=order
  12 +order-datasource.password=MySQL57@123
  13 +
  14 +#道闸平台地址-获取空闲车位数使用
  15 +dzurl.qingdao=http://47.104.7.222:12220
  16 +dzurl.nanze=http://121.40.121.40:8087
  17 +irain.bjxc.getfreeberthNum=
  18 +dzurl.irain=http://api.parkingwang.com:8280
  19 +dzurl.irain.appid=avakrky0gk1m7n00
  20 +dzurl.irain.appsecret=rrr6uz3aqvutpsq2lsna0k18cea4mabw
  21 +
  22 +
  23 +spring.redis.host=172.19.0.178
  24 +spring.redis.port=6379
  25 +spring.redis.password=myredis
  26 +spring.redis.database=0
... ...
zteits-nbiot/lib/com.huawei.m2m.cig.tup-1.3.1.jar 0 → 100644
No preview for this file type
zteits-nbiot/package/VehicleDetector-ZTEITS-ZTEITS-1.0.0.jar 0 → 100644
No preview for this file type
zteits-nbiot/package/package.zip 0 → 100644
No preview for this file type
zteits-nbiot/pom.xml 0 → 100644
  1 +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3 + <modelVersion>4.0.0</modelVersion>
  4 +
  5 + <groupId>com.zteits.nbiot</groupId>
  6 + <!-- 请修改为你的编解码插件的名字,命名规范:设备类型-厂商ID-设备型号,例如:WaterMeter-Huawei-NBIoTDevice -->
  7 + <artifactId>VehicleDetector-ZTEITS-ZTEITS</artifactId>
  8 + <version>1.0.0</version>
  9 + <!-- 请检查这里的值为bundle,不能为jar -->
  10 + <packaging>bundle</packaging>
  11 +
  12 + <properties>
  13 + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  14 + <junit.version>4.11</junit.version>
  15 + <fasterxml.jackson.version>2.7.4</fasterxml.jackson.version>
  16 + <felix.maven.plugin.version>2.5.4</felix.maven.plugin.version>
  17 + <json.lib.version>2.4</json.lib.version>
  18 + <m2m.cig.version>1.3.1</m2m.cig.version>
  19 + <slf4j.api.version>1.7.6</slf4j.api.version>
  20 + <basedir>./</basedir>
  21 + </properties>
  22 +
  23 + <dependencies>
  24 + <!-- 单元测试使用 -->
  25 + <dependency>
  26 + <groupId>junit</groupId>
  27 + <artifactId>junit</artifactId>
  28 + <version>${junit.version}</version>
  29 + </dependency>
  30 + <!-- 日志使用 -->
  31 + <dependency>
  32 + <groupId>org.slf4j</groupId>
  33 + <artifactId>slf4j-api</artifactId>
  34 + <version>${slf4j.api.version}</version>
  35 + </dependency>
  36 + <!-- 转换JSON使用,必须 -->
  37 + <dependency>
  38 + <groupId>com.fasterxml.jackson.core</groupId>
  39 + <artifactId>jackson-databind</artifactId>
  40 + <version>${fasterxml.jackson.version}</version>
  41 + </dependency>
  42 + <!-- Huawei提供的编解码接口,必须 -->
  43 + <!-- systemPath请替换成你本地的目录 \codecDemo\lib\com.huawei.m2m.cig.tup-1.3.1.jar -->
  44 + <dependency>
  45 + <groupId>com.huawei</groupId>
  46 + <artifactId>protocal-jar</artifactId>
  47 + <version>1.3.1</version>
  48 + <scope>system</scope>
  49 + <systemPath>${basedir}/lib/com.huawei.m2m.cig.tup-1.3.1.jar</systemPath>
  50 + </dependency>
  51 +
  52 + <!-- 本例中数据转换使用到的jar,你用到的jar请写到这里,记得把artifactId填入后面的Embed-Dependency -->
  53 + <dependency>
  54 + <groupId>net.sf.json-lib</groupId>
  55 + <artifactId>json-lib</artifactId>
  56 + <version>2.4</version>
  57 + <classifier>jdk15</classifier>
  58 + </dependency>
  59 +
  60 + </dependencies>
  61 + <build>
  62 + <plugins>
  63 + <!-- 编码需要使用JDK1.8版本 -->
  64 + <plugin>
  65 + <groupId>org.apache.maven.plugins</groupId>
  66 + <artifactId>maven-compiler-plugin</artifactId>
  67 + <configuration>
  68 + <source>1.8</source>
  69 + <target>1.8</target>
  70 + </configuration>
  71 + </plugin>
  72 + <!-- OSGI规范打包配置 -->
  73 + <plugin>
  74 + <groupId>org.apache.felix</groupId>
  75 + <artifactId>maven-bundle-plugin</artifactId>
  76 + <version>${felix.maven.plugin.version}</version>
  77 + <extensions>true</extensions>
  78 + <configuration>
  79 + <buildDirectory>./target</buildDirectory>
  80 + <archive>
  81 + <addMavenDescriptor>false</addMavenDescriptor>
  82 + </archive>
  83 + <instructions>
  84 + <Bundle-RequiredExecutionEnvironment>J2SE-1.5</Bundle-RequiredExecutionEnvironment>
  85 + <Bundle-Activator></Bundle-Activator>
  86 + <Service-Component>OSGI-INF/*</Service-Component>
  87 + <!-- 请修改为你的编解码插件的名字,命名规范:设备类型-厂商ID-设备型号,例如:WaterMeter-Huawei-NBIoTDevice -->
  88 + <Bundle-SymbolicName>VehicleDetector-ZTEITS-ZTEITS</Bundle-SymbolicName>
  89 + <Export-Package></Export-Package>
  90 + <Import-Package>
  91 + org.slf4j,
  92 + org.slf4j.spi,
  93 + org.apache.log4j.spi,
  94 + com.huawei.m2m.cig.tup.modules.protocol_adapter,
  95 + com.fasterxml.jackson.databind,
  96 + com.fasterxml.jackson.databind.node
  97 + </Import-Package>
  98 + <!-- 除junit,slf4j-api,jackson-databind,protocal-jar, 其他所有的依赖包,必须把包对应的artifactId填入Embed-Dependency。artifactId之间以逗号分隔。 -->
  99 + <Embed-Dependency>
  100 + json-lib
  101 + </Embed-Dependency>
  102 + </instructions>
  103 + </configuration>
  104 + <executions>
  105 + <execution>
  106 + <id>generate-resource</id>
  107 + <goals>
  108 + <goal>manifest</goal>
  109 + </goals>
  110 + </execution>
  111 + </executions>
  112 + </plugin>
  113 + </plugins>
  114 + </build>
  115 +</project>
0 116 \ No newline at end of file
... ...
zteits-nbiot/src/main/java/com/zteits/nbiot/decoder/Utilty.java 0 → 100644
  1 +package com.zteits.nbiot.decoder;
  2 +
  3 +
  4 +import java.util.Arrays;
  5 +
  6 +public class Utilty {
  7 +
  8 + private static Utilty instance = new Utilty();
  9 +
  10 + public static Utilty getInstance() {
  11 + return instance;
  12 + }
  13 +
  14 + public static final int MIN_MID_VALUE = 1;
  15 +
  16 + public static final int MAX_MID_VALUE = 65535;
  17 +
  18 +
  19 + public static int bytes2Int(byte[] b, int start, int length) {
  20 + int sum = 0;
  21 + int end = start + length;
  22 + for (int k = start; k < end; k++) {
  23 + int n = ((int) b[k]) & 0xff;
  24 + n <<= (--length) * 8;
  25 + sum += n;
  26 + }
  27 + return sum;
  28 + }
  29 +
  30 + public static byte[] int2Bytes(int value, int length) {
  31 + byte[] b = new byte[length];
  32 + for (int k = 0; k < length; k++) {
  33 + b[length - k - 1] = (byte) ((value >> 8 * k) & 0xff);
  34 + }
  35 + return b;
  36 + }
  37 +
  38 + public boolean isValidofMid(int mId) {
  39 + if (mId < MIN_MID_VALUE || mId > MAX_MID_VALUE) {
  40 + return false;
  41 + }
  42 + return true;
  43 + }
  44 +
  45 + public static String parseByte2HexStr(byte[] buf) {
  46 + if (null == buf) {
  47 + return null;
  48 + }
  49 +
  50 + StringBuffer sb = new StringBuffer();
  51 + for (int i = 0; i < buf.length; i++) {
  52 + String hex = Integer.toHexString(buf[i] & 0xFF);
  53 + if (hex.length() == 1) {
  54 + hex = '0' + hex;
  55 + }
  56 + sb.append(hex.toUpperCase());
  57 + }
  58 + return sb.toString();
  59 + }
  60 + /**
  61 + * 16进制转换成为integer
  62 + * @return
  63 + */
  64 + public static Integer hexStringToInteger(byte[] original, int from, int to) {
  65 + String s = Utilty.parseByte2HexStr(Arrays.copyOfRange(original, from, to));
  66 + return Integer.parseInt(s,16);
  67 + }
  68 +
  69 + /**
  70 + * 16进制转换成为string类型字符串
  71 + * @return
  72 + */
  73 + public static String hexStringToString(byte[] original, int from, int to) {
  74 + String s = Utilty.parseByte2HexStr(Arrays.copyOfRange(original, from, to));
  75 + if (s == null || s.equals("")) {
  76 + return null;
  77 + }
  78 + s = s.replace(" ", "");
  79 + byte[] baKeyword = new byte[s.length() / 2];
  80 + for (int i = 0; i < baKeyword.length; i++) {
  81 + try {
  82 + baKeyword[i] = (byte) (0xff & Integer.parseInt(s.substring(i * 2, i * 2 + 2), 16));
  83 + } catch (Exception e) {
  84 + e.printStackTrace();
  85 + }
  86 + }
  87 + try {
  88 + s = new String(baKeyword, "UTF-8");
  89 + new String();
  90 + } catch (Exception e1) {
  91 + e1.printStackTrace();
  92 + }
  93 + return s;
  94 + }
  95 +}
... ...
zteits-nbiot/src/main/java/com/zteits/nbiot/decoder/ZteitsCmdProcess.java 0 → 100644
  1 +package com.zteits.nbiot.decoder;
  2 +
  3 +import com.fasterxml.jackson.databind.JsonNode;
  4 +import com.fasterxml.jackson.databind.node.ObjectNode;
  5 +
  6 +import java.util.Arrays;
  7 +import java.util.Date;
  8 +
  9 +public class ZteitsCmdProcess {
  10 +
  11 + private String msgType = "cloudRsp";
  12 + private String serviceId = "VehicleDetectorInfo";
  13 + private String cmd = "SET_DEVICE_LEVEL";
  14 + private int hasMore = 1;
  15 + //请求处理的结果码,0表示成功,1表示失败
  16 + private int errcode = 1;
  17 + private int mid = 0;
  18 + private byte[] requests;
  19 + private JsonNode paras;
  20 +
  21 +
  22 + public ZteitsCmdProcess() {
  23 + }
  24 +
  25 + public ZteitsCmdProcess(ObjectNode input) {
  26 +
  27 + try {
  28 + this.msgType = input.get("msgType").asText();
  29 + this.requests = input.get("request").binaryValue();
  30 + /*
  31 + 平台收到设备上报消息,编码ACK
  32 + {
  33 + "msgType":"cloudRsp",
  34 + "request": ***,//设备上报的码流
  35 + "errcode":0,
  36 + "hasMore":0
  37 + }
  38 + * */
  39 + if (msgType.equals("cloudRsp")) {
  40 + //在此组装ACK的值
  41 + this.errcode = input.get("errcode").asInt();
  42 + this.hasMore = input.get("hasMore").asInt();
  43 + }
  44 + } catch (Exception e) {
  45 + this.errcode = 1;
  46 + e.printStackTrace();
  47 + }
  48 +
  49 + }
  50 +
  51 + public byte[] toByte() {
  52 + try {
  53 + /*
  54 + 平台收到设备的上报数据,根据需要编码ACK,对设备进行响应,如果此处返回null,表示不需要对设备响应。
  55 + * */
  56 + if (this.msgType.equals("cloudRsp")) {
  57 +
  58 + byte[] ack = new byte[28];
  59 + ack[0] = (byte) 0x77;
  60 + ack[1] = (byte)0x00;
  61 + //请求处理的结果码。
  62 + //0表示成功,1表示失败
  63 + if(errcode == 0){
  64 + ack[2] = (byte)0x70;
  65 + }else if(errcode == 1){
  66 + ack[2] = (byte)0x30;
  67 + }
  68 + //packCount 2H
  69 + ack[3] = requests[18];
  70 + ack[4] = requests[19];
  71 + //magId 4H
  72 + ack[5] = requests[22];
  73 + ack[6] = requests[23];
  74 + ack[7] = requests[24];
  75 + ack[8] = requests[25];
  76 + //command 2H
  77 + ack[9] = (byte)0x00;
  78 + ack[10] = (byte)0x00;
  79 + //时间8H
  80 + ack[11] = (byte)0x00;
  81 + ack[12] = (byte)0x00;
  82 + ack[13] = (byte)0x00;
  83 + ack[14] = (byte)0x00;
  84 + Long time = new Date().getTime()/1000;
  85 + byte[] timeByte = Utilty.int2Bytes(time.intValue(), 4);
  86 + ack[15] = timeByte[0];
  87 + ack[16] = timeByte[1];
  88 + ack[17] = timeByte[2];
  89 + ack[18] = timeByte[3];
  90 +
  91 + ack[19] = (byte)errcode;
  92 + ack[20] = (byte)0x00;
  93 + ack[21] = (byte)0x00;
  94 + ack[22] = (byte)0x00;
  95 + ack[23] = (byte)0x00;
  96 + ack[24] = (byte)0x00;
  97 + ack[25] = (byte)0x00;
  98 + return CRC16Util.appendCrc16(ack);
  99 + }
  100 + return null;
  101 + } catch (Exception e) {
  102 + e.printStackTrace();
  103 + return null;
  104 + }
  105 + }
  106 +
  107 +}
... ...
zteits-nbiot/src/main/resources/OSGI-INF/CodecProvideHandler.xml 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" immediate="true" name="com.zteits.nbiot.decoder.ProtocolAdapterImpl">
  3 + <implementation class="com.zteits.nbiot.decoder.ProtocolAdapterImpl"/>
  4 + <service>
  5 + <provide interface="com.huawei.m2m.cig.tup.modules.protocol_adapter.IProtocolAdapter" />
  6 + </service>
  7 +</scr:component>
... ...
zteits-nbiot/src/test/java/com/thrid/party/codec/demo/ProtocolServiceImplTest.java 0 → 100644
  1 +package com.thrid.party.codec.demo;
  2 +
  3 +import com.zteits.nbiot.decoder.ProtocolAdapterImpl;
  4 +import org.junit.Before;
  5 +import org.junit.Test;
  6 +
  7 +import com.fasterxml.jackson.databind.ObjectMapper;
  8 +import com.fasterxml.jackson.databind.node.ObjectNode;
  9 +import com.huawei.m2m.cig.tup.modules.protocol_adapter.IProtocolAdapter;
  10 +
  11 +/**
  12 + * Unit test for simple App.
  13 + */
  14 +public class ProtocolServiceImplTest {
  15 +
  16 + private IProtocolAdapter protocolAdapter;
  17 +
  18 + @Before
  19 + public void setProtocolAdapter() {
  20 + this.protocolAdapter = new ProtocolAdapterImpl();
  21 + }
  22 +
  23 + /**
  24 + * 测试用例1:设备向平台上报数据。
  25 + * <p>
  26 + * <pre>
  27 + * 设备上报数据:AA72000032088D0320623399
  28 + * </pre>
  29 + *
  30 + * @throws Exception
  31 + */
  32 + @Test
  33 + public void testDecodeDeviceReportData() throws Exception {
  34 + byte[] deviceReqByte = initDeviceReqByte();
  35 + ObjectNode objectNode = protocolAdapter.decode(deviceReqByte);
  36 + String str = objectNode.toString();
  37 + System.out.println(str);
  38 + }
  39 +
  40 + public static void main(String[] args) throws Exception {
  41 + IProtocolAdapter protocolAdapter = new ProtocolAdapterImpl();
  42 + byte[] deviceReqByte = initDeviceReqByte();
  43 + ObjectNode cloudRspObjectNode = initCloudRspObjectNode(deviceReqByte);
  44 + byte[] outputByte2 = protocolAdapter.encode(cloudRspObjectNode);
  45 + System.out.println("cloudRsp output:" + parseByte2HexStr(outputByte2));
  46 + }
  47 +
  48 + /**
  49 + * 测试用例2:平台向设备下发控制命令:
  50 + * <p>
  51 + * <pre>
  52 + * {
  53 + * //"identifier": "123",
  54 + * "msgType": "cloudReq",
  55 + * "cmd": "SET_DEVICE_LEVEL",
  56 + * "mid": 2016,
  57 + * "paras": { "value": "10" },
  58 + * "hasMore": 0
  59 + * }
  60 + * </pre>
  61 + */
  62 + @Test
  63 + public void testEncodeIoTSendCommand() throws Exception {
  64 + ObjectNode CloudReqObjectNode = initCloudReqObjectNode();
  65 + byte[] outputByte = protocolAdapter.encode(CloudReqObjectNode);
  66 + System.out.println("cloudReq output:" + parseByte2HexStr(outputByte));
  67 + }
  68 +
  69 + /**
  70 + * 测试用例3:设备对平台命令的应答消息 有命令短id
  71 + * <p>
  72 + * <pre>
  73 + * 设备应答消息:AA7201000107E0
  74 + *
  75 + * <pre>
  76 + *
  77 + * @throws Exception
  78 + */
  79 + @Test
  80 + public void testDecodeDeviceResponseIoT() throws Exception {
  81 + byte[] deviceRspByte = initDeviceRspByte();
  82 + ObjectNode objectNode = protocolAdapter.decode(deviceRspByte);
  83 + String str = objectNode.toString();
  84 + System.out.println(str);
  85 + }
  86 +
  87 + /**
  88 + * 测试用例4:平台收到设备的上报数据后对设备的应答,如果不需要应答则返回null即可
  89 + * <pre>
  90 + * {
  91 + * "identifier": "0",
  92 + * "msgType": "cloudRsp",
  93 + * "request": [AA,72,00,00,32,08,8D,03,20,62,33,99],
  94 + * "errcode": 0,
  95 + * "hasMore": 0
  96 + * }
  97 + *
  98 + * <pre>
  99 + *
  100 + * @throws Exception
  101 + */
  102 + @Test
  103 + public void testEncodeIoTResponseDevice() throws Exception {
  104 + byte[] deviceReqByte = initDeviceReqByte();
  105 + ObjectNode cloudRspObjectNode = initCloudRspObjectNode(deviceReqByte);
  106 + byte[] outputByte2 = protocolAdapter.encode(cloudRspObjectNode);
  107 + System.out.println("cloudRsp output:" + parseByte2HexStr(outputByte2));
  108 + }
  109 +
  110 + public static String parseByte2HexStr(byte[] buf) {
  111 + if (null == buf) {
  112 + return null;
  113 + }
  114 +
  115 + StringBuffer sb = new StringBuffer();
  116 + for (int i = 0; i < buf.length; i++) {
  117 + String hex = Integer.toHexString(buf[i] & 0xFF);
  118 + if (hex.length() == 1) {
  119 + hex = '0' + hex;
  120 + }
  121 + sb.append(hex.toUpperCase());
  122 + }
  123 + return sb.toString();
  124 + }
  125 +
  126 + /*
  127 + * 初始化:设备数据上报码流
  128 + */
  129 + private static byte[] initDeviceReqByte() {
  130 + /**
  131 + * 本例入参: 57 58 48 53 50 5F 4D 44 21 00 00 00 00 5A 9E 68 42 01 00 01 0B B8
  132 + 01 13 1D B1 12 00 14 00 1E 00 0F 04 00 00 01 00 00 02 00 05 00 0A 00 0F 00 00 00 00 00 00 00 00 00 00 00 00 27 8F
  133 + */
  134 + byte[] byteDeviceReq = new byte[60];
  135 +
  136 +
  137 +
  138 + byteDeviceReq[0] = (byte) 0x57;
  139 + byteDeviceReq[1] = (byte) 0x58;
  140 + byteDeviceReq[2] = (byte) 0x48;
  141 + byteDeviceReq[3] = (byte) 0x53;
  142 +
  143 + byteDeviceReq[4] = (byte) 0x50;
  144 + byteDeviceReq[5] = (byte) 0x5F;
  145 + byteDeviceReq[6] = (byte) 0x4D;
  146 + byteDeviceReq[7] = (byte) 0x44;
  147 +
  148 + byteDeviceReq[8] = (byte) 0x21;
  149 +
  150 + byteDeviceReq[9] = (byte) 0x00;
  151 +
  152 + byteDeviceReq[10] = (byte) 0x00;
  153 + byteDeviceReq[11] = (byte) 0x00;
  154 + byteDeviceReq[12] = (byte) 0x00;
  155 +
  156 + byteDeviceReq[13] = (byte) 0x5A;
  157 + byteDeviceReq[14] = (byte) 0x9E;
  158 + byteDeviceReq[15] = (byte) 0x68;
  159 + byteDeviceReq[16] = (byte) 0x42;
  160 + byteDeviceReq[17] = (byte) 0x01;
  161 +
  162 + byteDeviceReq[18] = (byte) 0x00;
  163 + byteDeviceReq[19] = (byte) 0x01;
  164 + byteDeviceReq[20] = (byte) 0x0B;
  165 + byteDeviceReq[21] = (byte) 0xB8;
  166 + byteDeviceReq[22] = (byte) 0x01;
  167 + byteDeviceReq[23] = (byte) 0x13;
  168 + byteDeviceReq[24] = (byte) 0x1D;
  169 + byteDeviceReq[25] = (byte) 0xB1;
  170 + byteDeviceReq[26] = (byte) 0x12;
  171 + byteDeviceReq[27] = (byte) 0x00;
  172 + byteDeviceReq[28] = (byte) 0x14;
  173 + byteDeviceReq[29] = (byte) 0x00;
  174 + byteDeviceReq[30] = (byte) 0x1E;
  175 + byteDeviceReq[31] = (byte) 0x00;
  176 + byteDeviceReq[32] = (byte) 0x0F;
  177 +
  178 + byteDeviceReq[33] = (byte) 0x04;
  179 + byteDeviceReq[34] = (byte) 0x00;
  180 + byteDeviceReq[35] = (byte) 0x00;
  181 + byteDeviceReq[36] = (byte) 0x01;
  182 + byteDeviceReq[37] = (byte) 0x00;
  183 + byteDeviceReq[38] = (byte) 0x00;
  184 + byteDeviceReq[39] = (byte) 0x02;
  185 + byteDeviceReq[40] = (byte) 0x00;
  186 + byteDeviceReq[41] = (byte) 0x05;
  187 + byteDeviceReq[42] = (byte) 0x00;
  188 + byteDeviceReq[43] = (byte) 0x0A;
  189 + byteDeviceReq[44] = (byte) 0x00;
  190 + byteDeviceReq[45] = (byte) 0x0F;
  191 + byteDeviceReq[46] = (byte) 0x00;
  192 + byteDeviceReq[47] = (byte) 0x00;
  193 + byteDeviceReq[48] = (byte) 0x00;
  194 + byteDeviceReq[49] = (byte) 0x00;
  195 + byteDeviceReq[50] = (byte) 0x00;
  196 + byteDeviceReq[51] = (byte) 0x00;
  197 + byteDeviceReq[52] = (byte) 0x00;
  198 + byteDeviceReq[53] = (byte) 0x00;
  199 + byteDeviceReq[54] = (byte) 0x00;
  200 + byteDeviceReq[55] = (byte) 0x00;
  201 + byteDeviceReq[56] = (byte) 0x00;
  202 + byteDeviceReq[57] = (byte) 0x00;
  203 + byteDeviceReq[58] = (byte) 0x27;
  204 + byteDeviceReq[59] = (byte) 0x8F;
  205 +
  206 +
  207 +
  208 + return byteDeviceReq;
  209 + }
  210 +
  211 + /*
  212 + * 初始化:平台向设备命令下发数据
  213 + */
  214 + private static ObjectNode initCloudReqObjectNode() {
  215 + ObjectMapper mapper = new ObjectMapper();
  216 + ObjectNode cloudReqObjectNode = mapper.createObjectNode();
  217 + ObjectNode paras = mapper.createObjectNode();
  218 + paras.put("value", "10");
  219 + cloudReqObjectNode.put("identifier", "123");
  220 + cloudReqObjectNode.put("msgType", "cloudReq");
  221 + cloudReqObjectNode.put("cmd", "SET_DEVICE_LEVEL");
  222 + cloudReqObjectNode.put("paras", paras);
  223 + cloudReqObjectNode.put("hasMore", 0);
  224 + cloudReqObjectNode.put("mid", 2016);
  225 + return cloudReqObjectNode;
  226 + }
  227 +
  228 + /*
  229 + * 初始化:设备对平台的响应码流
  230 + */
  231 + private static byte[] initDeviceRspByte() {
  232 + /*
  233 + * 测试用例:有命令短mid 设备应答消息:AA7201000107E0
  234 + */
  235 + byte[] byteDeviceRsp = new byte[12];
  236 + byteDeviceRsp[0] = (byte) 0xAA;
  237 + byteDeviceRsp[1] = (byte) 0x72;
  238 + byteDeviceRsp[2] = (byte) 0x01;
  239 + byteDeviceRsp[3] = (byte) 0x00;
  240 + byteDeviceRsp[4] = (byte) 0x01;
  241 + byteDeviceRsp[5] = (byte) 0x07;
  242 + byteDeviceRsp[6] = (byte) 0xE0;
  243 + return byteDeviceRsp;
  244 + }
  245 +
  246 + /*
  247 + * 初始化:平台对设备的应答数据
  248 + */
  249 + private static ObjectNode initCloudRspObjectNode(byte[] device2CloudByte) {
  250 +
  251 + ObjectMapper mapper = new ObjectMapper();
  252 + ObjectNode cloudRspObjectNode = mapper.createObjectNode();
  253 + cloudRspObjectNode.put("msgType", "cloudRsp");
  254 + // 设备上报的码流
  255 + cloudRspObjectNode.put("request", device2CloudByte);
  256 + cloudRspObjectNode.put("errcode", 0);
  257 + cloudRspObjectNode.put("hasMore", 0);
  258 + return cloudRspObjectNode;
  259 + }
  260 +}
... ...