ThingsBoard远程RPC调用设备

使用 RPC 功能

客户端 RPC

从设备发送客户端 RPC

平台处理客户端RPC

服务器端 RPC

服务器端RPC结构

发送服务器端RPC

使用 RPC 功能

ThingsBoard 允许您从服务器端应用程序向设备发送远程过程调用 (RPC),反之亦然。基本上,此功能允许您向设备发送命令或从设备发送命令并接收命令执行结果。本指南涵盖 ThingsBoard RPC 功能。阅读本指南后,您将熟悉以下主题:

  • RPC 类型;
  • 基本 RPC 用例;
  • RPC客户端和服务器端API;
  • RPC 小部件。

ThingsBoard RPC 功能根据远程过程执行的发起者可以分为两种类型:设备发起的 RPC 和服务器发起的 RPC。为了使用更熟悉的名称,我们将设备发起的 RPC 调用命名为客户端RPC,将服务器发起的 RPC 命名为服务器端RPC。

客户端 RPC

客户端 RPC 功能允许您将请求从设备发送到平台,并将响应返回给设备。

让我们回顾一下客户端 RPC 调用的典型用例:

  • 灌溉系统通过平台从在线服务获取天气预报。
  • 没有系统时钟的受限设备向平台请求当前时间戳。
  • 门禁读卡器向第三方安全系统发送请求,以做出开门并记录访问的决定。

在底层,设备向平台发送一条消息,该消息由规则引擎处理。规则引擎可以使用设备属性、遥测或存储在平台中的任何其他数据来应用一些计算。如果需要,规则引擎还可以调用外部系统。处理消息后,结果将发送回设备。见下图:

客户端 RPC 请求由两个字段组成,这两个字段都是必填的:

  • method - 用于区分 RPC 调用的方法名称。例如,“getCurrentTime”或“getWeatherForecast”。参数的值是一个字符串。
  • params - 用于处理请求的附加参数。该值是 JSON。如果不需要参数,请保留空 JSON“{}”。

RPC 请求示例:

{"method": "getCurrentTime","params": {}
}

RPC 响应可以是任何数字、字符串或 JSON。例如:

1631881236974
从设备发送客户端 RPC

ThingsBoard 提供了一个 API 来从设备发送 RPC 命令。该 API 特定于每个受支持的网络协议。您可以在相应的参考页面查看 API 和示例:​​​​​​

LwM2M 和 SNMP 协议尚不支持客户端 RPC。

平台处理客户端RPC

客户端 RPC 命令转换为消息类型为“TO_SERVER_RPC_REQUEST”的规则引擎消息。该消息包含基于唯一 UUID 的标识符,该标识符存储在“requestId”元数据字段中。您可以设计规则链以使用转换、丰富或任何其他规则节点类型 来处理传入消息。一旦传入消息转换为响应消息,就应该使用RPC Call Reply节点向设备发送回复。

例如,让我们修改根规则链以处理“getCurrentTime”客户端 RPC 并回复当前时间(以毫秒为单位)。我们将使用“Script”转换节点和以下 JS 代码:

var rpcResponse;
if (msg.method === "getCurrentTime"){rpcResponse = new Date().getTime();
} else {rpcResponse = "Unknown RPC request method: " + msg.method;  
}
return {msg: rpcResponse, metadata: metadata, msgType: msgType};

将RPC命令发送到服务端必须PUBLISH消息发送到下面主题:

v1/devices/me/rpc/request/$request_id

$request_id表示请求的整型标识符服务端必须发布到下面主题:

v1/devices/me/rpc/response/$request_id
  • 将请求发送到服务器

  • 收到服务器的响应

服务器端 RPC

服务器端 RPC 功能允许您将请求从平台发送到设备,并可选择将响应返回到平台。

服务器端 RPC 调用的典型用例是各种远程控制:重新启动、打开/关闭引擎、更改 GPIO/执行器的状态、更改配置参数等。

服务器端RPC分为单向和双向:

  • 单向 RPC 请求不需要设备提供任何回复。

双向 RPC 请求期望在可配置的超时时间内收到设备的响应。


 在 3.3 版本之前,ThingsBoard 仅支持轻量级RPC。轻量级 RPC 调用是短暂的,通常在 30 秒内,这是对平台的任何 REST API 调用的默认超时。由于它们的生命周期很短,因此没有理由将它们存储到数据库中。它们存在于服务器的内存中,假设如果服务器挂掉,仪表板小部件将向集群中的其他 ThingsBoard 服务器发送相同的请求。轻量级 RPC 消耗少量资源,因为它们的处理不会调用任何输入/输出操作,接受审计日志和规则引擎消息的存储。

从 3.3 版本开始,ThingsBoard 提供了对持久RPC 调用的支持。持久 RPC 具有可配置的生命周期并存储在数据库中。当您的设备可能长时间无法访问时,持久 RPC 非常有用。这种情况通常发生在网络连接不良或节能模式(PSM)的情况下。

服务器端RPC结构

服务器端RPC请求体由多个字段组成:

  • method - 强制,用于区分 RPC 调用的方法名称。例如,“getCurrentTime”或“getWeatherForecast”。参数的值是一个字符串。
  • params - 强制,用于处理请求的参数。该值是 JSON。如果不需要参数,请保留空 JSON“{}”。
  • timeout - 可选,处理超时值(以毫秒为单位)。默认值为 10000(10 秒)。最小值为 5000(5 秒)。
  • 过期时间- 可选,纪元时间值(以毫秒为单位,UTC 时区)。如果存在超时,则覆盖该超时
  • 持久性- 可选,请参阅[持久性]与[轻量级]RPC。默认值为“假”。
  • 重试- 可选,定义在网络和/或设备端发生故障时将重新发送持久 RPC 的次数。
  • extraInfo - 可选,定义将添加到[持久 RPC 事件]的持久 RPC 的元数据。

RPC 请求示例:

{"method": "setGPIO","params": {"pin": 4,"value": 1},"timeout": 30000
}

发送服务器端RPC

服务器端 RPC 通常使用 REST API 或仪表板小部件发送。事实上,仪表板小部件使用相同的 REST API。一旦平台收到 RPC,它就会验证有效负载并运行权限检查。然后,服务器端RPC命令被转换为规则引擎消息。规则引擎可以用附加参数来丰富命令,并最终将命令传送到设备。

我们来详细回顾一下如何发送命令:

客户端订阅服务端RPC命令必须SUBSCRIBE消息发送下面主题:

v1/devices/me/rpc/request/+

订阅后客户端会收到一条命令作为对相应主题的PUBLISH命令:

v1/devices/me/rpc/request/$request_id

$request_id表示请求的整型标识符。

客户端PUBLISH下面主题进行响应:

v1/devices/me/rpc/response/$request_id
  • 使用RPC debug terminal在仪表板调试

  • 订阅服务器RPC命令

  • 请求”connect”发送到设备

  • 收到设备的响

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/650856.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Flutter】自动生成图片资源索引插件二:FlutterAssetsGenerator

介绍 FlutterAssetsGenerator 插件 :没乱码,生成的图片索引命名是小驼峰 目录 介绍一、安装二、使用 一、安装 1.安装FlutterAssetsGenerator 插件 生成的资源索引类可以修改名字,我这里改成R 2. 根目录下创建assets/images 3. 点击image…

HPE Aruba Networking推出新一代Wi-Fi 7接入点 助力企业高效应对安全、AI与物联网挑战

HPE ArubaNetworking推出的全新Wi-Fi 7接入点,提供全面的AI就绪边缘IT解决方案,旨在为用户和物联网设备提供安全、高性能的连接服务,以实现数据的捕获和路由,从而满足AI训练和推理需求 休斯顿-2024年4月23日-慧与科技(NYSE: HPE)近…

Python浅谈清朝秋海棠叶版图

1、清朝疆域概述: 清朝是我国最后一个封建王朝,其始于1616年建州女真部努尔哈赤建立后金,此后统一女真各部、东北地区。后又降服漠南蒙古,1644年入关打败农民起义军、灭南明,削三藩,复台湾。后又收外蒙&am…

el-input-number 只能输入整数,最小值1,最大值5

<el-form-item label"排序" prop"name" > <el-input-number v-model"form.sort" placeholder"请输入唯一排序" :min1 :max"5" :precision"0" class"custom-input-number" /> </el-form-…

addr2line + objdump 定位crash问题

目录 背景 godbolt汇编工具 tombstone ARM平台汇编知识 寄存器介绍 常见汇编指令 函数入参及传递返回值过程 入参顺序 变参函数 虚函数表 典型问题分析过程 Crash BackTrace Addr2line objdump 拓展 为什么SetCameraId函数地址偏移是40(0x28) 参考 背景 最近在…

新兴游戏引擎Godot vs. 主流游戏引擎Unity和虚幻引擎,以及版本控制工具Perforce Helix Core如何与其高效集成

游戏行业出现一个新生事物——Godot&#xff0c;一个免费且开源的2D和3D游戏引擎。曾经由Unity和虚幻引擎&#xff08;Unreal Engine&#xff09;等巨头主导的领域如今迎来了竞争对手。随着最近“独特”定价模式的变化&#xff0c;越来越多的独立开发者和小型开发团队倾向于选择…

目前软件测试前景怎么样?有哪些机遇和挑战?

随着信息技术的快速发展&#xff0c;软件已经成为了我们生活中不可或缺的一部分。而软件的质量和稳定性也直接关系到用户的使用体验和企业的竞争力。因此&#xff0c;软件测试作为软件质量保证的重要环节&#xff0c;其前景也备受关注。 首先&#xff0c;从行业角度来看&#x…

javaEE--多线程学习-进程调度

进程调度不明白&#xff1f;看这一篇文章就够了&#xff0c;逻辑衔接严密&#xff0c;文末附有关键面试题&#xff0c;一个海后的小故事让你瞬间明白这里面的弯弯绕绕&#xff01; 目录 1.什么是进程&#xff1f; 2.进程控制块&#xff08;PCB&#xff09; 2.1 一个PCB就是一…

python中开发页面的两种方法:Qt Designer(PyQt图形化界面拖拽开发App界面)以及Django(开发Web应用框架)

一、开发独立的窗口&#xff0c;App的那种&#xff0c;可使用tkinter或者PyQt 使用PyQt时&#xff0c;里面有个工具Qt Designer&#xff0c;是一个可视化的界面设计工具&#xff0c;可以通过拖拽等方式来设计界面。下面就是Qt Designer的操作界面&#xff1a; 参考链接如下&am…

广播式自动相关监视(ADS-B)系统市场发展空间大 空中交通是其目前主要应用领域

广播式自动相关监视&#xff08;ADS-B&#xff09;系统市场发展空间大 空中交通是其目前主要应用领域 广播式自动相关监视&#xff08;ADS-B&#xff09;系统是一种基于全球卫星定位系统和利用空地、空空数据链实现交通监控和信息传递的空管监视系统。   ADS-B系统是一种航空…

企业微信如何接入智能客服

企业微信接入微信客服 一、企业微信—微信客服 1.操作链接&#xff1a;https://open.work.weixin.qq.com/help2/pc/17961 2.实现步骤&#xff08;移动端&#xff09; 1.工作台-微信客服 2.创建机器人客服 录入知识库和场景知识包 在客户群中接入智能客服 优点: 1.方便快…

靠这套 Pytest 接口自动化测试框架,击败了99%的人

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 Pytest 的下载安装 1、Python3 使用 pip install -U pytest 安装 2、查看 pytest 版本信息 py…