1.创建账号

天翼平台

2.创建产品

3.添加设备

4.在应用管理中新增应用

5.应用服务对接

SDK使用说明   中国电信物联网开放平台NB网关2.0API参考

收到平台推送过来的数据后,如果业务不复杂的话,推送频率不是特别高的话,可以直接进行业务处理,建议使用缓存机制,可以提高处理效率。正常情况下,直接处理即可

@Data
@ApiModel(value = "设备数据推送请求")
public class DevicePushRequest {@ApiModelProperty(name = "tenantId", value = "租户ID")private String tenantId;@ApiModelProperty(name = "productId", value = "产品ID")private String productId;@ApiModelProperty(name = "deviceId", value = "设备ID", required = true)private String deviceId;@ApiModelProperty(name = "messageType", value = "消息类型=dataReport")private String messageType;@ApiModelProperty(name = "IMEI", value = "NB终端设备识别号")private String IMEI;@ApiModelProperty(name = "IMSI", value = "NB终端sim卡标识")private String IMSI;@ApiModelProperty(name = "deviceType", value = "设备标识")private String deviceType;@ApiModelProperty(name = "topic", value = "数据上报主题")private String topic;@ApiModelProperty(name = "assocAssetId", value = "合作伙伴ID")private String assocAssetId;@ApiModelProperty(name = "timestamp", value = "时间戳", required = true)private long timestamp;@ApiModelProperty(name = "upPacketSN", value = "上行报文序号")private int upPacketSN;@ApiModelProperty(name = "upDataSN", value = "数据上报报文序号")private int upDataSN;@ApiModelProperty(name = "serviceId", value = "服务ID")private String serviceId;@ApiModelProperty(name = "protocol", value = "协议类型")private String protocol;@ApiModelProperty(name = "payload", value = "消息负载", required = true)private JSONObject payload;
}
@Data
public class CreateDevice {private String deviceName;private String deviceSn;private String imei;private String operator;private Integer productId;private CreateDeviceOther other;
}
@Data
public class CreateDeviceOther {private Integer autoObserver;private String imsi;private String pskValue;
}
@Data
public class DeviceCreateOnIotReq {private String deviceName;private String imei;private String imsi;}
@Api(tags = "电信IoT应用模块")
@Slf4j
@RestController
@RequestMapping("api/ct_wing/v1")
public class CtWingController {@Autowiredprivate CtWingService ctWingService;@ApiOperation("设备数据变化接收")@PostMapping("deviceDataChange")public JsonData deviceDataChangeReq(@ApiParam(value = "设备数据", required = true) @RequestBody JSONObject changeReq) {try {ctWingService.devicePushRecord(changeReq);} catch (Exception e) {log.error("deviceDataChangeReq()->error: {}", e.getMessage());}return JsonData.buildSuccess();}@ApiOperation(value = "Feign: 注册设备到IOT平台")@PostMapping(value = "/device/register")public JsonData registerDevice(@RequestBody DeviceCreateOnIotReq deviceCreateOnIotReq) {return ctWingService.createDevice(deviceCreateOnIotReq);}@ApiOperation(value = "Feign: 删除设备在IOT平台")@PostMapping(value = "/device/remove")public JsonData removeDevice(@RequestParam("deviceId") String deviceId) {return ctWingService.removeDevice(deviceId);}}
/*** 设备推送数据* 1.结构化处理* 2.校验数据* 3.存储到redis中的list结构** @param changeReq*/@Overridepublic void devicePushRecord(JSONObject changeReq) {if (changeReq != null) {String msgType = changeReq.getString("messageType");if (StringUtils.isNotBlank(msgType) && "dataReport".equals(msgType)) {DevicePushRequest devicePushRequest = null;try {devicePushRequest = JSONObject.parseObject(changeReq.toJSONString(), DevicePushRequest.class);} catch (Exception e) {log.error("devicePushRecord()->error: {}", e.getMessage());}if (devicePushRequest != null) {// 获取设备实际上报的数据String payload = devicePushRequest.getPayload().getString("APPdata");if (StringUtils.isNotBlank(payload)) {// 按协议校验if (protoFactory.validateDevice(base64StrToHexStr(payload))) {// 校验通过后存储到redis,从左边存值redisTemplate.opsForList().leftPush(CacheConst.IOT_DEVICE_KEY, devicePushRequest);}} else {log.error("devicePushRecord()->payload is null.");}}}}}/*** 处理设备数据,支持不同的协议交互*/@Overridepublic void dealWithDeviceData() {devicePushRequests.clear();// 从右边取值,先进先出Object devicePushReq;while ((devicePushReq = redisTemplate.opsForList().rightPop(CacheConst.IOT_DEVICE_KEY)) != null) {devicePushRequests.add(devicePushReq);}for (Object obj : devicePushRequests) {protoFactory.dealWithDevice(JSONObject.parseObject(JSONObject.toJSONString(obj), DevicePushRequest.class));}}
/*** 处理设备数据的定时任务*/
@Configuration
@EnableScheduling
public class DealWithDeviceTask implements SchedulingConfigurer {@Autowiredprivate CtWingService ctWingService;@Overridepublic void configureTasks(ScheduledTaskRegistrar taskRegistrar) {taskRegistrar.addTriggerTask(() -> ctWingService.dealWithDeviceData(), triggerContext -> {String cron = "0/1 * * * * ?"; // 每1秒轮询一次return new CronTrigger(cron).nextExecutionTime(triggerContext);});}
}
/*** 设备注册*/@Overridepublic JsonData createDevice(DeviceCreateOnIotReq deviceCreateOnIotReq) {CreateDevice device = new CreateDevice();device.setDeviceName(deviceCreateOnIotReq.getDeviceName());device.setImei(deviceCreateOnIotReq.getImei());device.setOperator("wfzn");device.setProductId(productId);CreateDeviceOther other = new CreateDeviceOther();other.setAutoObserver(0);other.setImsi(deviceCreateOnIotReq.getImsi());device.setOther(other);//不支持通过imei查询设备,所以直接注册设备,通过应答来判断是否重复注册JsonData jsonData = new JsonData();try {CreateDeviceResponse deviceResponse;try {deviceResponse = createDeviceOnIot(device);} catch (Exception e) {return null;}jsonData = validateIotResponse(deviceResponse);} catch (Exception e) {JsonData.buildResult(BizCodeEnum.IOT_REGISTER_SAME);}return jsonData;}@Overridepublic JsonData removeDevice(String deviceId) {JsonData jsonData = new JsonData();try {DeleteDeviceResponse deviceResponse = deleteDeviceOnIot(deviceId);jsonData = validateIotResponse(deviceResponse);} catch (Exception e) {JsonData.buildResult(BizCodeEnum.IOT_REGISTER_DELETE_FAIL);}return jsonData;}/*** 删除iot注册** @param deviceId* @return*/private DeleteDeviceResponse deleteDeviceOnIot(String deviceId) {AepDeviceManagementClient client = AepDeviceManagementClient.newClient().appKey(appKey).appSecret(appSecret).build();DeleteDeviceRequest request = new DeleteDeviceRequest();request.setParamMasterKey(masterKey);request.setParamDeviceIds(deviceId);request.setParamProductId(productId);DeleteDeviceResponse response = null;try {response = client.DeleteDevice(request);} catch (Exception e) {e.printStackTrace();} finally {client.shutdown();}return response;}/*** 校验Iot响应** @param deviceResponse* @return* @throws UnsupportedEncodingException*/private JsonData validateIotResponse(BaseApiResponse deviceResponse)  {String deviceId = null;if (deviceResponse.getStatusCode() == 200) {JSONObject body = JSONObject.parseObject(new String(deviceResponse.getBody(), StandardCharsets.UTF_8));if ("0".equals(body.get("code").toString())) {if (deviceResponse instanceof CreateDeviceResponse) {deviceId = JSONObject.parseObject(body.get("result").toString()).get("deviceId").toString();log.info("create iot device success: {}", deviceId);} else if (deviceResponse instanceof DeleteDeviceResponse) {return JsonData.buildSuccess("success");}} else {return JsonData.buildError(body.get("msg").toString());}} else {return JsonData.buildError("StatusCode: " + deviceResponse.getStatusCode());}return JsonData.buildSuccess(deviceId);}/*** 注册设备到ctWing平台** @param content* @return*/private CreateDeviceResponse createDeviceOnIot(CreateDevice content) {AepDeviceManagementClient client = AepDeviceManagementClient.newClient().appKey(appKey).appSecret(appSecret).build();CreateDeviceRequest request = new CreateDeviceRequest();request.setParamMasterKey(masterKey);request.setBody(JSONObject.toJSONBytes(content));CreateDeviceResponse response = null;try {response = client.CreateDevice(request);} catch (Exception e) {e.printStackTrace();} finally {client.shutdown();}return response;}

对应产品和应用信息,去IOT平台创建的产品和应用里面看

电信天翼物联网平台对接应用服务ctWing相关推荐

  1. NB-IOT电信云北向开发,电信天翼物联网平台对接应用服务

    创建账号 中国电信天翼物联网CTWing门户网站 注册好之后在个人中心进行认证,否则无法进行设备相关的操作 进入控制台 认证通过后的账号,左侧菜单比较丰富,因此可以对产品设备操作了 输入验证码 点击开 ...

  2. 电信天翼物联网平台对接流程

    电信物联网对接: 注册 微信公众号搜索"天翼物联产业联盟",关注后申请注册,填写注册材料信息 填完信息提交后等待天翼物联邮件通知,邮件内附带用户名和密码,还有物联网开放平台的各种门 ...

  3. Springboot+Netty实现基于天翼物联网平台CTWing(AIOT)终端TCP协议(透传模式)-设备终端(南向设备)

    电信的天翼物联网平台CTWing(AIOT)原先是我们俗称的aep,主要用于接入nb-iot设备,当然也可以接入其他的设备,在熟悉AIOT平台后,做后端的我有时候急需终端样品(智能门禁,支付识别终端, ...

  4. C#对接天翼物联网平台,一些坑

    C#对接天翼物联网平台,一些坑 因为公司要采购一批NB设备,开始着手对接事宜.刚开始也是一头雾水,首先登陆官网,下载各种文档查看.从最开始的申请账号啥的,这些东西应该大家都能搞完.最关键的就是订阅相关 ...

  5. Springboot+Netty实现基于天翼物联网平台CTWing(AIOT)终端TCP协议(透传模式)-应用订阅端(北向应用)

    之前实现了使用Springboot+Netty基于天翼物联网平台CTWing(AIOT)终端TCP协议(透传模式)-设备终端(南向设备),模拟设备发送的数据给到了AIOT平台,那么在第三方应用也需要去 ...

  6. 一文读懂天翼物联网平台(AIoT)

    中国电信天翼智能物联网开放平台(简称"天翼物联网平台AIoT"),是中国电信融合5G.物.云.网.AI等数字要素,打造的泛在智联.全域感知.万物赋智.安全可信.互联互通.虚实共生的 ...

  7. 产品 电信nb接口调用_从硬件开发者的角度实现简单的电信NB物联网平台配置

    一.前期准备 1.设备 3.8V左右电源(给BC95模组供电).USB转串口(和BC95模组的串口通信).BC95模组.电信NB-IoT专用SIM.个人电脑(带上必要的驱动,如CH340的驱动等). ...

  8. 天翼物联网平台(AIoT)量子安全能力发布,为物联网端到端安全加装“量子盾”!

    近日,天翼物联举办"安全防护 天翼随行"量子安全能力线上发布会,正式发布天翼物联网平台(AIoT)量子安全能力,为物联网数据安全加装"量子盾",以实际行动践行建 ...

  9. nb移动udp_电信NB物联网平台不仁不义有人来管管吗?

    电信刚推出NB-IoT商用网络不久,个人觉得电信大有在未来物联网连接.流量等方面超过移动的可能,至少是看到了强劲的先发优势.这几天一直在找一个NB烟雾报警器,接洽的客户告诉我他们的传感器需要上电信物联 ...

最新文章

  1. Android Annotation-让你的代码更加优雅(二)做一个Java诗人(JavaPoet)
  2. ubuntu(14.04) 下配置重写
  3. linux sftp创建多用户,linux下SFTP多用户创建
  4. 针对集合中的某个字段对集合中的对象进行排序
  5. LeetCode(38): 报数
  6. 微软亚洲研究院的“人立方”搜索
  7. 爬虫-csdn博客爬虫-打造具有搜索功能的小工具
  8. mangle 打标签冲突
  9. 【a202】【9208】输油管道问题
  10. MyBatis3一对一,一对多
  11. Android 编写WiFi探针,一种WiFi探针路由器的制作方法
  12. 切比雪夫不等式例题讲解_13.初中数学:怎么解一元一次不等式?把解集表示在数轴上,基础训练...
  13. lego_loam 代码阅读与总结
  14. 抖音落地页一键复制微信号跳转微信的方法
  15. 需求分析的基础知识点(自己的理解)
  16. sio.savemat得到空struct解决方法
  17. mysql查询一个字段最大值_查询表中某一个字段的数字最大值的记录
  18. 在线客服系统源码-在线客服php源码下载-新版网站客服系统-搭建教程-无限坐席
  19. 考研数学:罗尔定理的推论
  20. 嵌入式软件工程师经典面试题(附答案)(二)

热门文章

  1. 简单五子棋游戏c语言简单,C语言制作简单五子棋游戏
  2. 如何修改网页里面的文字和复制网页中限制的文字
  3. 2015年11月小结
  4. Vue Events模块原理分析
  5. (转)常用的js代码
  6. GB28181公网语音对讲
  7. 使用ajax爬取今日头条街拍图片
  8. C. Pythagorean Triples
  9. 算法实践:数独的基本解法
  10. Euresys eVision 加载和保存图像