ThingsBoard远程RPC调用设备

news2024/10/6 20:30:00

使用 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.coloradmin.cn/o/1626174.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue2项目升级到vue3经历分享1

依据vue官方文档,vue2在2023年12月31日终止维护。因此决定将原来的岁月云记账升级到vue3,预计工作量有点大,于是想着把过程记录下来。 原系统使用的技术栈 "dependencies": {"axios": "^0.21.1","babel-…

Qt配置CMake出错

一个项目需要在mingw环境下编译Opencv源码,当我用Qt配置opencv的CMakeLists.txt时,出现了以下配置错误: 首先我根据下述博文介绍,手动配置了CMake,但仍不能解决问题。 Qt(MinGW版本)安装 - 夕西行 - 博客园 (cnblogs.…

数之寻软件怎么样?

数之寻软件是一款功能强大的数据恢复和备份软件,以下是对其特点和功能的详细评价: 一、数据恢复方面: 高效的数据恢复能力:数之寻软件采用了先进的算法和数据恢复技术,能够快速有效地恢复丢失或损坏的数据。无论是文…

laravel视频对接aws

本次对接文件上传,目标是实现超级大文件的上传任务,可能就是4~5个g的视频文件,折腾了蛮久熟悉s3,因此记录一下。 大家要是对filesystem不清楚去看一下官方文档不然可能有点懵逼。 首先我先是对接了一个普通的s3存储文件的功能&a…

[解决] 为什么 App Inventor 扩展导入了,但是没啥反应?

大概率是导入拓展后,没有拖动拓展到界面上! 导入拓展后,别忘了拖动拓展到主界面上,这样才算真正创建了拓展对象,这时才能使用拓展的方法。 原文:为什么 App Inventor 扩展导入了,但是没啥反应&…

了解Cookie登录:原理、实践与安全指南

什么是Cookie登录? Cookie是什么 当你首次登录网站时,你会输入用户名和密码。在后台,网站的服务器验证这些凭据是否正确。一旦确认你的身份无误,服务器就会创建一个Cookie,并将其发送到你的浏览器。这了解Cookie登录…

量子+AI,实用还需多久?

生成式人工智能正在席卷全球。OpenAI的GPT-4能够通过律师资格考试,Midjourney的图像作品能够赢得艺术大奖,而Sora则能够根据文本创造出令人难以置信的逼真视频。 这些AI模型的成就预示着通用人工智能的曙光——一个曾经只存在于科幻小说中的概念。然而&a…

快速了解网站访问为什么提示存在安全隐患,该怎么解决

这通常是由于网站使用了不安全的HTTP协议进行通信,或者网站的SSL证书存在问题,或者网站被标记为危险,或者网页中混杂了非HTTPS的内容。 网站访问提示不安全通常是由于以下原因之一引起的,可以按照相应的解决方案进行排查和解决&…

Java集合相关的List、Set、Map基础知识

目录 一、集合介绍 二、List 三、Map HashMap的数据结构 如何理解红黑树 四、set 一、集合介绍 在Java中,集合是一种用于存储对象的数据结构,它提供了一种更加灵活和强大的方式来处理和操作数据。Java集合框架提供了一系列接口和类,用…

CyberData统一元数据服务

CyberData统一元数据服务功能完善,实现了湖仓平台元数据在整个平台的统一管理以及外部数据源元数据的主动发现和多计算引擎间元数据的互通互联。 同时,我们支持跨多元计算场景,以及在元数据基础上的统一数据权限管理和数据湖的自动化优化加速…

2024年好用又便宜的云手机!哪款性价比高?

随着科技的飞速发展,云计算技术也在不断演进,而云手机作为其创新之一,已经开始在我们的生活中崭露头角。它通过将手机的硬件和软件功能移到云端,让用户能够借助强大的云计算资源完成各种任务。2024年,哪款云手机性价比…

springboot整合rabbitMQ系列10 利用插件实现延时消息

插件的安装,本文就不做描述了,插件安装后如下,就说明安装成功了1 添加pom依赖,yml配置就不讲了2 核心类,定义交换机的代码改成如下,其它的定义队列,设置绑定关系,设置死信等&#xf…

WebStorm 2024 for Mac:前端开发的强大助手

WebStorm 2024 for Mac是一款专为前端开发者设计的集成开发环境(IDE),以其强大的功能和出色的性能,为Mac平台上的开发者提供了高效、便捷的Web开发体验。 WebStorm 2024 for Mac v2024.1.1中文激活版下载 这款IDE支持多种编程语言…

深入理解GTK、Qt、AWTK:跨平台GUI框架对比

目录标题 GTK特性:优点:缺点: Qt特性:优点:缺点: AWTK特性:优点:缺点: 适用场景 在当今的软件开发领域,图形用户界面(GUI)的开发是不可…

鸿蒙APP开发页面组件之间的属性关系

我们将对于多页面以及更多有趣的功能展开叙述,这次我们对于 HarmonyOS 的很多有趣常用组件并引出一些其他概念以及解决方案、页面跳转传值、生命周期、启动模式(UiAbility),样式的书写、状态管理以及动画等方面进行探讨 页面之间…

文件权限管理

文件权限管理 1. 权限对象 权限对象含义u属主,所有者g属组o其他人 2. 权限类型 权限类型含义值r读权限4w写权限2x执行权限1 3. 修改文件属主及属组 命令:chown(change own)更改文件或目录属主与属组名 3.1 修改文件属主与属组 只修改属主:chown $…

交互式探索微生物群落与生态功能的关系

微生物群落在生态系统中发挥则重要功能,我们在对微生物群落进行分析时,会将不同分类水平(从门到属)的微生物类群的相对丰度与测定的某一生态功能进行相关性分析。但由于微生物类群数较多,又有不同的分类水平&#xff0…

python利用tg机器人推送发消息从安装到使用(二)

上一篇请参考: python利用tg机器人推送发消息从安装到使用-CSDN博客 本篇主要针对第二种方式推送tg消息,也就是使用telegram库的Bot发送消息,不仅可以发送文本,还可以方便的发送超链接内容和图片。 不过,随着telegram库的升级等各种原因,目前网上很多代码都不能直接使…

汽车组装3D电子说明书更通俗易懂

激光打印机由于造价高、技术更先进,因此在使用和维护上需要更专业的手法,而对于普通客户来说并不具备专业操作激光打印机的技能,为了通俗易懂地让客户理解激光打印机,我们为企业定制了激光打印机3D产品说明书,将为您带…

【如此简单!数据库入门系列】之ER模型快速入门

文章目录 模式设计基本概念实体(Entity)属性(Attributes)实体集和键(key)关系(Relationship) ER图实体和属性关系 泛化与特化总结更多例子 模式设计 大家还记得什么是物理模式、概念…