电信平台对接CTWing具体实现流程

简介:要实现电信平台对接,需要设备、电信平台、系统进行对接,主要介绍后台获取http请求和指令下发,具体流程如下图:
在这里插入图片描述

一、在电信平台上创建设备、产品。

具体参考:官方文档||TCP产品创建

创建产品结果图
产品图
创建设备结果图
设备图

二、激活电信平台上的设备

使用工具TCP&UDPDebug对产品进行激活

我使用的是TCP协议,填入目标ip:tcp.ctwing.cn和端口号:8996,具体如下图:

TCP激活流程

2.通过文档介绍的格式,发送登录请求:

官方参考链接
消息格式

3.登录请求具体实现介绍

登录报文标识符:0x01 —(需要去掉0x)
deviceId_length:设备id的长度(需要转16进制)
deviceId:设备的id(需要转16进制ASCll码)
password_length:设备的特征串长度(需要转16进制)
password:设备特征串(需要转16进制ASCll码)

登录参数
ASCll在线转换器1-----http://www.ab126.com/goju/1711.html
ASCll在线转换器2-----https://www.mokuge.com/tool/asciito16/
10进制转16进制-----https://www.matools.com/hex

4.登录成功查看

登录成功返回05 00 00
返回数

设备显示在线
设备在线

设备激活成功
设备已激活

5.可以发送消息进行测试

创建消息跟踪可以查看消息的情况
在这里插入图片描述

使用TCP发送消息
0x02 +数据长度(2字节) +业务数据
数据长度转换16进制+业务数据转换ASCll码文件
其中具体格式格式如下 02 00 05 68 65 6c 6c 6f

如下图,消息发送成功查看
发送成功

三、SDK应用部署java项目

创建应用
创建应用
下载sdk
下载sdk
部署到项目中 sdk具体应用流程介绍
sdk导入实现

四、java程序获取HTTP消息推送

创建对应的订阅事件,其中订阅地址可以直接推送过去
在这里插入图片描述
具体的接收代码
注意:不能使用本地IP,需部署外网才可收到消息,地址一定要写对

package com.optical.controller;

import com.optical.common.Base64;
import com.optical.common.JsonUtil;
import com.optical.common.SDKUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.json.simple.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@Api(description = "接收电信传回的数据")
@RestController
@RequestMapping(value = "/xitang/ctwing")
public class CTWingController {

    public static Logger logger = LoggerFactory.getLogger(CTWingController.class);

    //电信传回的数据
    @ApiOperation("电信传回的数据")
    @RequestMapping(value = "/IoT", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
    private ResponseEntity<HttpStatus> updateDeviceData(@RequestBody String DataJson) throws Exception {

        JSONObject jsonObject = JsonUtil.stringToJson(DataJson);  //获取json格式数据

        String payload = String.valueOf(jsonObject.get("payload"));    //为空转换null字符串

        JSONObject data = JsonUtil.stringToJson(payload); //获取消息

        String apPdata = String.valueOf(data.get("APPdata"));   //获取单跳数据

        String string = Base64.baseToString(apPdata);  // BASE64解密  {"type":1,"reason":0}

        JSONObject jsonObject2 = JsonUtil.stringToJson(string);  //获取json格式数据

        Integer type = Integer.parseInt(String.valueOf(jsonObject2.get("type")));
        String reason = String.valueOf(jsonObject2.get("reason"));

        System.out.println("type:" + type);
        System.out.println("reason:" + reason);

        if (type == 1){  //跌倒报警触发
            //调用方法,发送消息到电信平台
            SDKUtil.CreateCommand();
        }else if (type == 2){  //跌倒消警

        }else if (type == 4){  //人员出现+人员离开

        }

        return new ResponseEntity<>(HttpStatus.OK);
    }

}

五、收到消息进行指令下发

收到指令结果图如下:
结果图

    /*指令下发*/
    public static void CreateCommand() throws Exception {
        AepDeviceCommandClient client = AepDeviceCommandClient.newClient()
                .appKey(应用管理AppKey).appSecret(应用管理AppSecret)
                .build();

        CreateCommandRequest request = new CreateCommandRequest();
        String bodyString ="{\n" +
                "  \"content\": {\"消息内容"\ },\n" +
                "  \"设备id\": \"150734109527\",\n" +
                "  \"operator\": \"随便填\",\n" +
                "  \"productId\": \"产品id\",\n" +
                "  \"ttl\": 7200,\n" +
                "  \"level\": 1\n" +
                "}";
        byte[] bytes = ByteUtil.getBytes(bodyString);
        request.setBody(bytes);  
          //具体格式见前面请求body说明
        request.setParamMasterKey(设备masterKey);  
          // single value
        System.out.println(client.CreateCommand(request));
        client.shutdown();
    }
  • 5
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值