目录
一、场景介绍
- 物联网卡 NB-IOT
- 通过http接口订阅设备上报数据
说明:该章节主要讲解
- 订阅方URL地址(接口),如何设置
- 接口如何编写
二、硬件对接(忽略)
三、准备工作
Stage 1 :注册账号 -- CTwing 官网
Stage 2 :点击控制台 -- 开通服务
开通后需要等到5-120分钟,后台开通权限,才能看到左侧菜单栏
Stage 3 :创建产品
- 设备管理 -- 产品 -- 创建产品
- 产品详情 (其中设备型号:ss11-1 )
Stage 4 :添加设备
- 设备管理 -- 产品 -- 设备管理 -- 添加设备
Stage 5 :订阅方URL地址(设置接口)
- 设备管理 -- 产品 -- 点击产品,进入
- 设备管理 -- 应用订阅
- 设置订阅方URL地址(接口地址随便命名)
接口地址为:ip:port/cwt/aiot
Stage 6 :查看设备上报数据
- 设备管理 -- 设备 -- 点击设备名进入 -- 数据查看
四、接口编写(java)
1. contorller 类
import com.alibaba.fastjson.JSON;
import com.whxph.xphservice.dto.JsonResult;
import com.whxph.xphservice.entity.ctwing.CTWingResult;
import com.whxph.xphservice.service.CWTingService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
/**
* Coding by 李炯 on 2022/8/3 11:56
*/
@Api(tags = "天翼CWTing", value = "")
@RestController
@RequestMapping("/cwt")
@Slf4j
public class CWTingController {
//@Autowired
//private CWTingService cwTingService;
/**
* @return Boolean
* @explain 测试Swing
* @author lijiong
* @time 2023年04月4日
*/
@RequestMapping(method = RequestMethod.POST,value = "/aiot" )
@ApiOperation(value = "测试Swing", notes = "作者:lijiong")
public JsonResult<String> aiotTest(@RequestBody String DataJson) {
JsonResult result = new JsonResult();
log.info("电信CTWing-->{}",DataJson);
CTWingResult ctWingResult = JSON.parseObject(DataJson,CTWingResult.class);
//cwTingService.insertDate(ctWingResult);//入库逻辑
return result.success();
}
}
2. 实体类 - CTWingResult.java
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CTWingResult {
private int upPacketSN;
private int upDataSN;
private String topic;
private long timestamp;
private String tenantId;
private String serviceId;
private String protocol;
private String productId;
private Payload payload;
private String messageType;
private String deviceType;
private String deviceId;
private String assocAssetId;
private String IMSI;
private String IMEI;
}
3. 实体类 - Payload.java
import com.alibaba.fastjson.annotation.JSONField;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Payload {
@JSONField(name = "APPdata")
private String APPdata;
}
4. 实体类 - JsonResult.java
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import java.io.Serializable;
/**
* Copyright: Copyright (c) 2019
*
* <p>说明: 用户服务层</P>
* @version: V1.0
* @author: flying-cattle
*/
@Data
public class JsonResult<T> implements Serializable{
private static final long serialVersionUID = 1071681926787951549L;
private int flag= Constants.MSG_OK;//1-成功 0-失败
/**
*<p> 状态说明</p> //具体提示内容
*/
private String msg;
/**
* <p>返回数据</p>
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
private T obj;//附加实体
public JsonResult() {
}
/**
* <p>返回成功,有数据</p>
* @return JsonResult
*/
public JsonResult success() {
this.setFlag(Constants.MSG_OK);
this.setMsg("成功");
return this;
}
/**
* <p>返回成功,有数据</p>
* @param msg 操作说明
* @param obj 对象
* @return JsonResult
*/
public JsonResult<T> success(String msg,T obj) {
this.setFlag(Constants.MSG_OK);
this.setMsg(msg);
this.setObj(obj);
return this;
}
/**
* <p>返回成功,有数据</p>
* @param obj 对象
* @return JsonResult
*/
public JsonResult<T> success(T obj) {
this.setFlag(Constants.MSG_OK);
this.setMsg("操作成功");
this.setObj(obj);
return this;
}
/**
* <p>返回成功,无数据</p>
* @param msg 操作说明
* @return JsonResult
*/
public JsonResult<T> success(String msg) {
this.setFlag(Constants.MSG_OK);
this.setMsg(msg);
this.setObj(null);
return this;
}
/**
* <p>返回失败,无数据</p>
* @param msg 消息
* @return JsonResult
*/
public JsonResult<T> error(String msg) {
this.setFlag(Constants.MSG_FAIL);
this.setMsg(msg);
this.setObj(null);
return this;
}
/**
* <p>返回失败,有数据</p>
* @param msg 消息
* @param obj 对象
* @return JsonResult
*/
public JsonResult<T> error(String msg,T obj) {
this.setFlag(Constants.MSG_FAIL);
this.setMsg(msg);
this.setObj(obj);
return this;
}
}
5. 工具类 - Base64Util.java
作者比较懒,不想记忆具体使用方法,所以写了一个简单的工具类(希望大家不要介意)
import lombok.extern.slf4j.Slf4j;
import java.util.Base64;
@Slf4j
public class Base64Util {
public static String decode(String str) {
return new String(Base64.getDecoder().decode(str.getBytes()));
}
}