设备端和服务端检测设备是否在线的方法

简介: 使用物联网时,有时设备端和服务端都需要检测设备是否在线。

 

设备端检测自己是否在线的方法是:添加一个自定义权限为发布和订阅的topic,设备端用该topic向平台发送消息后,平台会把消息原样返回设备端。

离线判定逻辑:

  1. 严格的:发送消息后,5秒内没有收到消息算失败,出现1次失败,判定为离线
  2. 普通的:发送消息后,5秒内没有收到消息算失败,连续2次失败,判定为离线
  3. 宽松的:发送消息后,5秒内没有收到消息算失败,连续3次失败,判定为离线

在服务端中判断设备是否在线可以使用平台提供api来实现。可以使用的接口为:GetDeviceStatusBatchGetDeviceStateQueryDeviceDetailBatchQueryDeviceDetailRRpc

GetDeviceStatusBatchGetDeviceStateQueryDeviceDetailBatchQueryDeviceDetail这些接口会返回设备状态Status,取值:

ONLINE:设备在线。OFFLINE:设备离线。UNACTIVE:设备未激活。DISABLE:设备已禁用。

调用rrpc接口判断设备是否示例代码如下:

    RRpcRequest request = new RRpcRequest();
    request.setProductKey(productKey);
    request.setDeviceName(deviceName);
    request.setRequestBase64Byte(Base64.encodeBase64String("Hello World".getBytes()));//消息内容,base64编码
    request.setTimeout(5000); //响应超时设置
    // 获取结果
    RRpcResponse response = (RRpcResponse) client.getAcsResponse(request);
    if (response != null) {
      //使用RrpcCode判断设备状态      
      //SUCCESS:成功,设备在线
      //TIMEOUT:设备响应超时
      //OFFLINE:设备离线
      //HALFCONN:设备离线(设备连接断开,但是断开时间未超过一个心跳周期)
      //UNKNOWN:系统异常
      if ("SUCCESS".equals(response.getRrpcCode())) {
        System.out.println("RRPC 检测:" + deviceName + "设备在线");
      } else if (response.getRrpcCode() == null) {
        System.out.println("RRPC 检测:" + deviceName + "设备可能不存在");
      } else { // 其他状态归结为设备不在线,也可以根据业务情况自行区分处理
        System.out.println("RRPC 检测:" + deviceName + "设备不在线:");
      }
    } else {
      System.out.println("RRPC 检测:" + "接口调用不成功");
    }
目录
相关文章
|
物联网 开发工具
物联网平台实用技巧:设备端检测自己是否在线
基于MQTT接入的设备靠心跳保活,但心跳是周期性的、且自动收发和超时重连,这些特性给主动检测设备端是否在线带来了一定难度。本文提供通过消息收发是否正常判定设备是否在线的原理、流程、实现方式。
4992 1
|
12月前
|
云安全 运维 安全
阿里云免费版SSL证书申请及部署图文教程指导
SSL证书是个人和企业搭建网站不可或缺的云安全产品,SSL证书能够为网站和移动应用(APP)及小程序提供数据HTTPS加密协议访问,保障数据的安全。阿里云SSL证书有收费版的也有免费版的,有的新手用户由于是初次在阿里云申请SSL证书,可能不是很清楚免费版证书的申请和部署流程,本文为以图文形式为大家展示阿里云免费版SSL证书最新的申请及部署教程,以供参考。
|
JavaScript 前端开发
【Vue 3】如何实现动态表单生成器的拖拽功能?
【Vue 3】如何实现动态表单生成器的拖拽功能?
|
SQL 关系型数据库 数据库
手把手教你管理PostgreSQL数据库及其对象
手把手教你管理PostgreSQL数据库及其对象
1022 0
|
消息中间件 网络协议 开发工具
MQ产品使用合集之rocketmq5.x只有tcp接入点吗,python sdk需要http接入点,请问怎么使用
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
792 2
|
Java Windows
【极光系列】springBoot集成elasticsearch
【极光系列】springBoot集成elasticsearch
381 2
|
JavaScript 开发者 内存技术
修改npm源--多种方式
修改npm源--多种方式
7193 0
|
前端开发 Java 关系型数据库
手办商城系统|Springboot+vue+ElementUI手办商城系统
手办商城系统|Springboot+vue+ElementUI手办商城系统
311 0