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

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

 

设备端检测自己是否在线的方法是:添加一个自定义权限为发布和订阅的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接入的设备靠心跳保活,但心跳是周期性的、且自动收发和超时重连,这些特性给主动检测设备端是否在线带来了一定难度。本文提供通过消息收发是否正常判定设备是否在线的原理、流程、实现方式。
5071 1
|
并行计算 安全 Java
深入理解Java并发编程:并行与并发、进程与线程、优先级、休眠与让步
深入理解Java并发编程:并行与并发、进程与线程、优先级、休眠与让步
583 0
|
机器人 API
随机昵称网名[百万昵称库]免费API接口教程
该API接口用于随机生成网名,适用于机器人昵称、虚拟用户名等场景。支持POST和GET请求,需提供用户ID和KEY。返回状态码及信息提示,示例如下:{"code":200,"msg":"豌豆公主"}。详情见官方文档:https://www.apihz.cn/api/zicisjwm.html
1012 1
|
数据采集 存储 编解码
一份简明的 Base64 原理解析
Base64 编码器的原理,其实很简单,花一点点时间学会它,你就又消除了一个知识盲点。
950 3
|
缓存 监控 算法
京东购物车如何提升30%性能
【8月更文挑战第27天】以下是一些提升京东购物车性能的方法:1. 减少网络请求次数,采用异步请求;2. 使用本地和服务器端缓存;3. 优化购物车算法,如商品归堆和实时计算;4. 前端优化,如图片压缩和延迟加载;5. 后端架构优化,包括数据库和服务器资源优化;6. 建立性能监控系统并持续优化。这些措施可显著提升用户体验。
563 0
|
机器学习/深度学习 存储 分布式计算
Hadoop与机器学习的融合:案例研究
【8月更文第28天】随着大数据技术的发展,Hadoop已经成为处理大规模数据集的重要工具。同时,机器学习作为一种数据分析方法,在各个领域都有着广泛的应用。本文将介绍如何利用Hadoop处理大规模数据集,并结合机器学习算法来挖掘有价值的信息。我们将通过一个具体的案例研究——基于用户行为数据预测用户留存率——来展开讨论。
917 0
|
安全 Java 数据安全/隐私保护
SpringSecurity2 --- 通用权限管理模型
本文介绍了两种常见的权限管理模型:ACL和RBAC。ACL(访问控制列表)是一种传统的模型,允许将权限直接赋予用户或角色,形成多对多的关系。开发者可以独立实现ACL,Spring Security也提供了支持。相比之下,RBAC(基于角色的访问控制)更现代,不直接给用户分配权限,而是通过角色来间接控制。RBAC强调最小权限、职责分离和数据抽象,分为RBAC0、RBAC1、RBAC2和RBAC3四个级别,其中RBAC1引入角色继承,RBAC2和RBAC3则涉及职责分离的概念,包括静态和动态的角色互斥。
|
JavaScript 开发者 内存技术
修改npm源--多种方式
修改npm源--多种方式
8695 0
|
Java 关系型数据库 MySQL
基于SpringBoot后端实现连接MySQL数据库并存贮数据
基于SpringBoot后端实现连接MySQL数据库并存贮数据

热门文章

最新文章