ThingsBoard允许您从服务器端应用程序向设备发送远程过程调用(RPC),反之亦然。基本上,此功能使您可以将命令发送到设备并接收命令执行的结果。同样,您可以执行来自设备的请求,在后端应用一些计算或其他服务器端逻辑,然后将响应发送回设备。本指南涵盖ThingsBoard RPC功能。阅读本指南后,您将熟悉以下主题:

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

    RPC调用类型

    Thinsboard RPC功能可以基于发起者分为两种类型:设备发起的RPC和服务器发起的RPC。为了使用更熟悉的名称,我们将源于设备的RPC调用命名为client-side RPC,并将源于服务器的RPC命名为server-side RPC。
    RPC功能 - 图1
    服务器端RPC可以分为单向和双向:

  • 单向RPC请求没有发送确认就发送到设备,并且显然不提供设备的任何响应。仅当在可配置的超时时间内没有与目标设备的活动连接时,RPC才可能失败。

RPC功能 - 图2

  • 双向RPC请求被发送到设备,并期望在一定的超时时间内接收到来自设备的响应。服务器端请求将被阻止,直到目标设备回复该请求为止。

RPC功能 - 图3

设备RPC API

ThingsBoard提供了一种便捷的API,可以从设备上运行的应用程序发送和接收RPC命令。该API特定于每种受支持的网络协议。您可以在相应的参考页面上查看API和示例:

  • MQTT RPC API参考
  • CoAP RPC API参考
  • HTTP RPC API参考

    服务器端RPC API

    ThingsBoard系统提供了RPC服务可以将RPC调用从服务端应用程序发送到设备。
    如果需要发送RPC请求需要使用下面URL执行HTTP POST请求

    1. http(s)://host:port/api/plugins/rpc/{callType}/{deviceId}

    url说明:

  • callType 表示 oneway或者twoway

  • deviceId 表示设备ID

必填参数:

  • method - 表示json字符串格式的方法名
  • params - 表示json字符串格式的对象参数列表

例如:

  • set-gpio-request.sh 请求脚本

    1. curl -v -X POST -d @set-gpio-request.json http://localhost:8080/api/plugins/rpc/twoway/$DEVICE_ID \
    2. --header "Content-Type:application/json" \
    3. --header "X-Authorization: $JWT_TOKEN"
  • set-gpio-request.json响应

    1. {
    2. "method": "setGpio",
    3. "params": {
    4. "pin": "23",
    5. "value": 1
    6. }
    7. }

    注意 执行此请求需要使用有效的JWT令牌替换$JWT_TOKEN 该令牌应属于

  • 拥有TENANT_ADMIN角色的用户

  • 拥有CUSTOMER_USER角色的用户,该用户拥有$DEVICE_ID标识的设备

你可以按照以下指南获取令牌.

RPC规则节点

可以将RPC动作集成到处理工作流程中。有2个用于处理RPC请求的规则节点。