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.mfbz.cn/a/576111.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于discuz论坛网址优化的一些记录(伪静态)

最近网站刚上线,针对SEO做了些操作,为了方便网站网页被收录,特此记录下 1.开启伪静态 按照操作勾选所有项,然后点击查看伪静态规则 2.打开宝塔,找到左侧列表的网站,然后找到相应站点的设置。把discuz自动…

科普:嵌入式代码软件在环(SiL)测试的可靠性

关键词:嵌入式系统、软件在环(SiL)、测试、生命周期 01.简介 当前,嵌入式系统开发的大趋势为通过软件实现大量的硬件功能,这导致软件的复杂程度显著上升——代码开发成本和风险也成倍增加。复用已有系统中的软件组件…

【数据结构(邓俊辉)学习笔记】绪论05——动态规划

文章目录 0.前言1. Fibonacci数应用1.1 fib():递归1.1.1 问题与代码1.1.2 复杂度分析1.1.3 递归分析 1.2 fib():迭代 0.前言 make it work,make it right,make it fast. 让代码能够不仅正确而且足够高效地…

明日周刊-第7期

转眼间就又快到了五一假期,小长假有什么计划吗。封面配图是杭州高架上的月季花,非常好看。 文章目录 一周热点资源分享言论歌曲推荐 一周热点 鸿蒙系统持续扩大影响力:近期,华为官方宣布广东省已有超过600款应用加入鸿蒙系统&…

大模型的研究新方向:混合专家模型(MoE)

大模型的发展已经到了一个瓶颈期,包括被业内所诟病的罔顾事实而产生的“幻觉”问题、深层次的逻辑理解能力、数学推理能力等,想要解决这些问题就不得不继续增加模型的复杂度。随着不同应用场景的实际需求,大模型的参数会变得越来越大,复杂性和规模不断的增加,尤其是在多模…

C# 生成图形验证码

目录 应用场景 开发运行环境 设计 生成内容 生成图片 实现 核心代码 调用示例 小结 应用场景 我们当用户登录系统时经常会用到图形验证码技术,要求用户识别图片中的内容,并正确输入,方可尝试登录。类似的场景还有用户注册或者涉及…

svg图标填充渐变色及CSS鼠标悬停纯色渐变色转换

svg图标填充渐变色及CSS鼠标悬停纯色渐变色转换&#xff1a; HTML&#xff1a; <!--底部导航--> <ul class"milliaNav"> <li class"active"><a href"#"> <svg class"icon" viewBox"0 0 1024 1024&qu…

随手记:树结构翻页和定位指定数据逻辑

业务背景&#xff1a; 树形组件展示数据&#xff0c;数据包含过去数据&#xff0c;现在数据&#xff0c;未来数据&#xff0c;用户在首次进入页面时&#xff0c;展示的是当天的数据&#xff0c;如果当天没有数据&#xff0c;则显示最近一条的过去数据。数据按照时间越长数据会…

【AMBA Bus ACE 总线 5 -- Non-cached master】

文章目录 Non-cached masterNon-cached master 图 1-1 Non-cached master 意思就是,比如对于master0,它想写的时候,就直接发起transaction,它不是对自己的local cache进行操作,比如以non-shareable write 为例,master0在写的时候分别在AW,和 W channel发起命令和数据,见…

CV | 360BEV: Panoramic Semantic Mapping for Indoor Bird‘s-Eye View理解

本文主要是对于论文360BEV的解读和实现。 Paper:2023.03_360BEV: Panoramic Semantic Mapping for Indoor Birds-Eye View 360BEV&#xff1a;室内鸟瞰全景语义映射 arxiv.org/pdf/2303.11910 Code:jamycheung/360BEV: Repository of 360BEV (github.com) Demo:360BEV (jamyche…

win11 修改hosts提示无权限

win11下hosts的文件路径 C:\Windows\System32\drivers\etc>hosts修改文件后提示无权限。 我做了好几个尝试&#xff0c;都没个啥用~比如&#xff1a;右键 管理员身份运行&#xff0c;在其他版本的windows上可行&#xff0c;但是win11不行&#xff0c;我用的是微软账号登录的…

Android 组件提供的状态保存(saveInstanceState)与恢复(restoreInstanceState)

在Android的组件Activity中&#xff0c;有这样一对方法: onSaveInstanceeState 和 onRestoreInstanceState 这两对方法&#xff0c;可以让我在Activiy被异常销毁时&#xff0c;保存状态&#xff1b;以及在Activity重建时&#xff0c;恢复状态。 比如&#xff1a;当我们在输入…

就业班 第三阶段(负载均衡) 2401--4.18 day2 LVS-DR模式

3、LVS/DR 模式 实验说明&#xff1a; 1.网络使用NAT模式 2.DR模式要求Director DIP 和 所有RealServer RIP必须在同一个网段及广播域 3.所有节点网关均指定真实网关 主机名ip系统用途client172.16.147.1mac客户端lvs-server172.16.147.154centos7.5分发器real-server1172.16.…

SpringCloud简介

微服务架构理论 微服务架构概述 Spring Cloud简介Spring Cloud 技术栈SpringBoot和SpringCloud的关系SpringCloud和Dubbo区别对比相关文档 微服务架构概述 微服务是一种架构模式&#xff0c;将单一应用程序划分成一组小的服务&#xff0c;服务之间相互协调、相互配合&#xff0…

OSPF的LSA与特殊区域

Area区域概念 *一个区域维护一张LSDB&#xff0c;路由器详细的链路信息只在这个区域内传播 不是每一台路由器都需要了解所有外部目的地的详细信息 *OSPF网络的层次化设计 通过区域ID标识 骨干&#xff08; Backbone &#xff09;区域&#xff0c;必须是area 0(骨干区域…

milvus对象存储和消息中间件的工厂设计模式分析

milvus对象存储和消息中间件的工厂设计模式分析 需求 根据参数设置创建mq和storage mq有kafka,pulsar storage有local,minio,remote 配置文件 根据配置文件选择初始化mq和存储: mq:type: pulsarcommon:storageType: minio对于这种类型一个是mq&#xff0c;一个是存储&…

kubernetes部署控制器Deployment

一、概念 在学习rc和rs控制器资源时&#xff0c;这两个资源都是控制pod的副本数量的&#xff0c;但是&#xff0c;他们两个有个缺点&#xff0c;就是在部署新版本pod或者回滚代码的时候&#xff0c;需要先apply资源清单&#xff0c;然后再删除现有pod&#xff0c;通过资源控制&…

接口测试和Mock学习路线(上)

一、接口测试和Mock学习路线-第一阶段&#xff1a; 掌握接口测试的知识体系与学习路线掌握面试常见知识点之 HTTP 协议掌握常用接口测试工具 Postman掌握常用抓包工具 Charles 与 Fiddler结合知名产品实现 mock 测试与接口测试实战练习 1.接口协议&#xff1a; 需要先了解 O…

Vue3 + Element-Plus 对接高德地图实现搜索提示选址、点击地图选址、自我定位功能(最新)

Vue3 Element-Plus 对接高德地图实现搜索提示选址、点击地图选址、自我定位功能&#xff08;最新&#xff09; 1、效果展示2、实现代码2.1 GaoDeMap.vue2.2 SystemDialog.vue2.3 UnusedList.vue.vue 1、效果展示 2、实现代码 2.1 GaoDeMap.vue <template><div style…

【个人博客搭建】(11)swagger添加jwt信息

这个主要是为了方便使用swagger时&#xff0c;能更好的带入我们的token。 ps&#xff1a;如果使用其他第三方api工具&#xff08;apipost、postman等&#xff09;则不需要。 &#xff08;当然&#xff0c;不用不能没有&#xff0c;是吧&#xff09; 1、在AddSwaggerGen内添加…
最新文章