指南

ThingsBoard教程和指南。

RPC调用请求

ThingsBoard允许你从服务端应用程序向设备发送远程过程调用RPC反之亦然。
本教程将向你展示如何使用规则引擎将远程请求调用发送到关联设备。

用例

让我们假设以下用例:

  • 设备:
    • 风向传感器
    • 转子电机
  • 资产:
    • 风力发电机
  • 转子电机发起RPC请求并根据风向更改风轮机的方向
  • RPC调用属性:
    • 方法:spinLeftspinRight
    • 参数:value
注意:

转子电机控制左右保证风向与风力涡轮机之间的角度不得超过5度。

先决条件

我们假设你已完成以下指南并查看了以下文章:

原型定义

风力发电机已安装风向传感器和转子电机两个设备:

  • 风力发电机表示资产其名称为Wind Turbine和类型为Wind turbine
  • 风向传感器表示设备其名称为Wind Direction Sensor和类型为Direction Sensor
  • 转子电机表示设备其名称为Rotating System和类型为Rotating System
  • 创建风力发电机和设备之间的关系类型为Contains:
    • Wind TurbineWind Direction Sensor
    • Wind TurbineRotating System
  • 创建类型的关系Uses:
    • Rotating SystemWind Direction Sensor

流程

在本节中我们将解释本教程中每个节点的用途:

  • 节点A:Message Type Switch
    • 根据消息类型路由入站的消息。
  • 节点B:Save Timeseries
    • 将来自Wind Direction SensorRotating System的消息遥测存储到数据库中。
  • 节点C:Related attributes
    • 加载Wind Direction SensorwindDirection遥测数据并将其保存到消息元数据中使用windDirection作为名称。
  • 节点D:Change originator
    • 将发起者从设备Wind Direction SensorRotating System提交的消息更改为资产Wind Turbine的消息进行处理。
  • 节点E:Save Timeseries
    • 将来自资产Wind Turbine的消息遥测存储到数据库中。
  • 节点F:Transformation Script
    • 将原始消息转换为RPC请求消息。
  • 节点G:Filter Script
    • 检查传入消息的msgType是否为RPC消息
  • 节点H:RPC call request
    • 获取消息payload并将其作为响应发送到Rotating System



配置规则链

以下显示了RPC调用请求教程的规则链图片:

image

  • 下载上述规则链的json文件并将其导入。
  • 不要忘记将新规则链标记为”root”。

你也可以自己创建新的规则链在下一节将向你展示如何创建它。

创建新的规则链(RPC调用请求教程)

  • 转到Rule Chains ->Add new Rule Chain
  • 输入名称Tutorial of RPC Call Request并点击ADD按钮。

image image

  • 现在创建了新的规则链将其标记为“root”。
添加所需的节点

在本教程中你将创建8个节点并如下所述:

节点A:Message Type Switch
  • 添加Message Type Switch并将其连接到Input节点
    该节点将根据消息类型POST_TELEMETRY_REQUEST路由入站消息。

  • 输入名称Message Type Switch

image

节点B:Save TimeSeries
  • 添加Save TimeSeries节点并将其连接到Message Type Switch节点其关联类型为Post telemetry
    该节点会将入站消息payload的TimeSeries数据存储到数据库中并将它们与消息发起者标识的设备关联即Wind Direction SensorRotating System

  • 输入名称Save Time Series

image

节点C:Related attributes
  • 添加Related attributes节点并将其连接到关系类型为SuccessSave TimeSeries的节点。
    该节点从关联的Wind Direction Sensor的遥测源windDirection加载到Rotating System将其保存到消息metadata中。
  • 填写下表中输入的数据字段:
FieldInput Data
Name Fetch Wind Sensor Telemetry
Direction From
Max relationship level 1
Relationship type Uses
Entity type Device
Latest telemetry true
Source telemetry windDirection
Target telemetry windDirection

image

节点D:Change Orignator
  • 添加Change Orignator节点并将其连接到关联类型为SuccessSave TimeSeries节点。
    该节点会将发起者设备Wind Direction SensorRotating System更改为关联资产Wind Turbine它们之间的关联类型均为Contains
    结果提交的消息将作为来自该实体的消息进行处理
  • 填写下表中输入的数据字段:
FieldInput Data
Name Create New Telemetry
Originator source Related
Direction To
Max relationship level 1
Relationship type Contains
Entity type Asset

image

节点E:Save TimeSeries
  • 添加Save TimeSeries”节点并将其连接到关系类型为SuccessChange Orignator节点。
    该节点将来自传入消息payload的TimeSeries数据从作为消息Originator的AssetWind Turbine存储到数据库中。
  • 输入名称Save Time Series

image

节点F:Transform Script
  • 添加Transform Script节点并将其连接到关联类型为SuccessRelated attributes节点。
    该节点会将原始消息转换为RPC请求消息。
  • RPC调用将具有2个属性:
    • 方法: spinLeftspinRight
    • 参数: value

image

  • 输入名称New RPC Message
  • 添加以下脚本:
 var newMsg = {};
 var value = Math.abs(msg.turbineDirection - metadata.windDirection);
 if ((value < 180 && msg.turbineDirection < metadata.windDirection)||
     (value > 180 && msg.turbineDirection > metadata.windDirection)) {
     newMsg.method = 'spinLeft';
 }
 if ((value <= 180 && msg.turbineDirection > metadata.windDirection)||
     (value >= 180 && msg.turbineDirection < metadata.windDirection)) {
     newMsg.method = 'spinRight';
 }
 if(newMsg.method == 'spinLeft' || 'spinRight'){
     msgType = 'RPC message';
 }
 newMsg.params = Math.round(value * 100) / 100;
 return {msg: newMsg, metadata: metadata, msgType: msgType}; 
节点G:Filter Script
  • 添加Filter Script节点并将其连接到关联类型为SuccessTransform Script
    此节点将检查传入消息的msgType是否为RPC消息

  • 输入名称Check RPC Message
  • 添加以下脚本:
: return msgType == 'RPC message'; 

image

节点H:RPC call request
  • 添加RPC call request节点并将其连接到关联类型为TrueFilter Script节点。
    该节点获取消息payload并将其作为响应发送到消息发起者。
  • 输入名称Rotating System
  • 输入超时值60秒。

image


保存已经编辑完成的规则链。



如何验证规则链

  • 使用以下javascript代码模拟Wind Direction Sensor设备。
  • 使用以下JavaScript代码来模拟Rotating System 设备。
    该代码包含一种方法可根据传入的RPC消息模拟更改风轮机方向。

要运行脚本你需要执行以下步骤:

  • 复制Wind Direction Sensor设备访问令牌和Rotating System设备访问令牌,然后将其粘贴到脚本中
    你可以从设备页面复制访问令牌。

    在本教程中
    • Wind Direction Sensor设备访问令牌为Z61K03FAGSziW9b0nKsm
    • Rotating System设备访问令牌jSuvzrURCbw7q4LGtygc

    但是这些访问令牌是唯一的你将需要复制设备的访问令牌。

image image

  • 打开终端并转到包含模拟脚本的文件夹然后运行以下命令:
    • node WindDirectionEmulator.js
    • node RotatingSystemEmulator.js



配置仪表盘

以下屏幕截图显示了Wind Turbine Dashboard的外观:

image

下载json文件并将其导入。

  • 转到Dashboards->Add new Dashboard->Import Dashboard并删除下载的json文件

下一步是配置导入的仪表板使用的别名。

image

单击Edit alias按钮然后输入下表中显示的输入数据:

Alias Field Input Data
Wind Turbine Filter type Single entity
Type Asset
Asset Wind Turbine
Wind Direction Sensor Filter type Single entity
Type Device
Device Wind Direction Sensor
Rotating System Filter type Single entity
Type Device
Device Rotating System

仪表盘的配置现已完成你可以验证它是否按预期工作。

此外你可以看到:

  • 如何使用RPC call reply规则节点

请参阅另请参阅部分下的第二个链接以了解如何执行此操作。



另请参阅

下一步

  • 入门指南 - 这些指南提供了ThingsBoard主要功能的快速概述。

  • 安装指南 - 了解如何在各种操作系统上安装ThingsBoard。

  • 设备连接 - 了解如何根据您的连接方式或解决方案连接设备。

  • 数据看板 - 这些指南包含有关如何配置复杂的ThingsBoard仪表板的说明。

  • 数据分析 - 了解如何使用规则引擎执行基本的分析任务。

  • 硬件样品 - 了解如何将各种硬件平台连接到ThingsBoard。

  • 高级功能 - 了解高级ThingsBoard功能。

  • 开发指南 - 了解ThingsBoard中的贡献和开发。