LeaForest / ThingBoard-Instruction

对Thingsboard物联网平台的叙述及相关文档汇总

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

ThingsBoard

再次對ThingsBoard的結構與常用功能進行簡單介紹和整理。

Thingsboard的安裝

以樹莓派3B平臺的的安裝爲例,參考官方文檔的鏈接:在Raspberry Pi 3 Model B上安装ThingsBoard

按照文檔説明,簡單的配置后啓動服務,並登錄界面。

系統架构

ThingsBoard v2.2开始,该平台经过了重构,以支持微服务架构,而且还能够在独立模式下将其作为整体应用程序运行。

瞭解更多詳細信息:

​ (整體架構圖)

​ (微服務架構圖)

Thingboard面板

規則链库

简述

规则引擎是用于构建基于事件的工作流的易于使用的框架。有3个主要组成部分:

  • 消息 -任何传入事件。它可以是来自设备,设备生命周期事件,REST API事件,RPC请求等的传入数据。
  • 规则节点 -对传入消息执行的功能。有许多不同的节点类型可以过滤、转换,对传入消息执行某些操作或与外部系统通信。
  • 规则链 -节点之间通过关系相互连接,因此来自规则节点的出站消息将发送到下一个连接的规则节点。
  • 规则节点关系 - 标识关系的逻辑含义的标签,如“Succes”或“Failure”、“True”或“False”.

规则引擎消息,是可序列化的 (数据结构不变)。

表示以下系统中的各种消息:

  • 来自设备的遥测, 属性更新或RPC 调用;
  • 实体生命周期事件: created, updated, deleted,分配,未分配,属性更新;
  • 设备状态事件: connected, disconnected, active, inactive等;
  • 其他系统事件.

包含以下信息:

  • 消息ID: 基于时间的唯一通用标识符;
  • 消息的发起者: 设备Device,资产 Asset 或其他实体 Entity 标识符;
  • __消息类型__Type of the message: “Post telemetry” 或 “Inactivity Event”等;
  • 消息的__有效负载__:带有实际消息的JSON正文;
  • __元数据__Metadata: 键值对列表以及其他有关消息数据.

租户管理员可以定义一个“ 根”规则链,还可以定义多个其他规则链。根规则链处理所有传入的消息,并将其转发到其他规则链以进行其他处理。其他规则链也可以将消息转发到不同的规则链。

如"input"、"rule chain"节点。

节点介绍

創建模拟数据

如果需要創建模擬遙測數據,以進行相關通信的測試時,可直接通過規則鏈進行創建,而無需再使用脚本進行發送:

  1. 分別打開設備管理和規則鏈管理,創建一個新的設備並添加或導入一個新的規則鏈:

  1. 進入規則鏈中,添加節點并進行鏈接、保存:

  1. 退至設備進行遙測數據的查看:


数据转换

设备正使用自定义传感器收集數據并将其推送到ThingsBoard,若希望__在保存到数据库之前,对传入遥测或属性进行数据验证和修改__用此方法:

单个设备遥测数据的处理与返回

這是一個簡單的案例,將對設備的遙測數據,在規則鏈中進行處理,並重新返回該設備,實現遙測數據的處理和更替:

  1. 創建設備,並添加或導入規則鏈

  2. 進行節點的配置

    • 添加模擬數據節點generator

    • 添加數據類型轉換節點message type switch;

    • 添加script數據轉換處理節點:

    • 添加規則鏈rule chain至根鏈;

  3. 連接節點后,保存配置,并進入創建的設備觀察遙測數據的變化:

⭐对之前的记录进行遥测转换

具体案例:https://thingsboard.io/docs/user-guide/rule-engine-2-0/tutorials/transform-telemetry-using-previous-record/

多个设备遥测数据的处理与关联

此案例将对多台设备的遥测数据进行关联并处理,最终返回至关联的新设备中,以提供处理数据的TOKEN接口.该方法可以将遥测或属性从设备复制到相关资产,以便可以汇总遥测。

  1. 分别创建两个遥测输入设备,和一个遥测输出设备:

  2. 为遥测输出设备添加设备关联:

  3. 创建新的规则链:

  4. 为了方便测试,为两个遥测输入数据设备,添加两个模拟的输入遥测数据:

  5. 对节点依次进行配置:

    • 添加switch节点,对根链中的设备类型进行检测,并返回类型和数据:

    • 分别添加script转换节点,对两个遥测输入设备的数据类型进行转换:

    • 添加change originator变换节点,根据关联的遥测输出设备进行传输:

    • 添加save timeseries时间序列保存节点,将遥测输入数据输出至遥测输出设备并保存:

    • 添加originator attributes节点,配置输出设备的遥测属性:

    • 添加script输入数据转换节点:

    • 再次添加save timeseries时间序列节点,将处理的数据输出至设备并保存:

  6. 连接节点后保存,进入根链,并添加关联节点至新创的规则链:

  7. 返回至遥测输出设备,观察处理后的数据:

设备告警功能

能够创建和管理与您的实体(设备,资产,客户等)相关的警报。默认情况下,警报会传播到所有相关实体(仅父级关系)。

具体内容及设置案例:https://thingsboard.io/docs/user-guide/alarms/

⭐REST API调用

ThingsBoard Professional Edition支持自定义规则引擎REST API调用功能。

ThingsBoard提供了将自定义REST API调用发送到规则引擎,处理请求的有效负载并在响应正文中返回处理结果的API。这对于许多用例很有用。例如:

  • 通过自定义API调用扩展平台的现有REST API;
  • 利用设备/资产/客户的属性丰富REST API调用,并转发给外部系统以进行复杂处理;
  • 为您的自定义小部件提供自定义API。

要执行REST API调用,您可以使用规则引擎控制器REST API

图片

注意:您在呼叫中指定的实体ID将是“规则引擎”消息的始发者。如果您未指定实体ID参数,则您的用户实体将成为消息的发起者。

电子邮件

发生复杂事件时发送电子邮件,并使用“电子邮件模板”中其他实体的属性。

具体案列:https://thingsboard.io/docs/user-guide/rule-engine-2-0/tutorials/send-email/

⭐RPC调用

根据定义的条件进行RPC调用。

具体案列:https://thingsboard.io/docs/user-guide/rule-engine-2-0/tutorials/rpc-reply-tutorial/

其他

  • 与外部管道(如Kafka,Spark,AWS服务等)集成。

数据分析節點

特定于ThingsBoard PE的分析节点。用于分析流数据或持久数据。

<https://thingsboard.io/docs/user-guide/rule-engine-


用户

從上圖能看出,社區版主要包含了:系統管理員、租戶管理員、租戶、客戶以及用戶幾個層級。

而系統管理員、租戶、用戶的權限也各不相同。

系統管理員:

租戶:

用戶:

*ps:用戶下對應的实体,包括了設備、資產、客戶以及儀表板等,而遥测數據則包括屬性、時間序列傳感讀數、統計信息和事件。

设备

设备连接事件:

  • 连接事件 -设备连接到ThingsBoard时触发。在基于会话的传输(例如MQTT)中有意义。也将为HTTP传输触发,但在这种情况下,它将在每个HTTP请求上触发;
  • 断开事件 -当设备与ThingsBoard断开连接时触发。在基于会话的传输(例如MQTT)中有意义。也将为HTTP传输触发,但在这种情况下,它将在每个HTTP请求上触发;
  • 活动事件 -设备推送遥测,属性更新或rpc命令时触发;
  • 不活动事件 -当设备在一定时间内不活动时触发。请注意,即使没有从设备断开连接事件,也可能触发此事件。通常表示一段时间没有触发任何活动事件;

设备服务器端属性

  • **active-**表示当前设备状态,为true或false;

  • **lastConnectTime-**表示设备最后一次连接到ThingsBoard的时间,自1970年1月1日格林尼治标准时间00:00:00以来的毫秒数

  • **lastDisconnectTime-**表示设备与ThingsBoard断开连接的最后时间,自1970年1月1日格林威治标准时间00:00:00以来的毫秒数

  • **lastActivityTime-**表示设备上次推送遥测,属性更新或rpc命令的时间,自1970年1月1日格林威治标准时间00:00:00以来的毫秒数

  • **inactivityAlarmTime-**表示上一次触发不活动事件的时间,自1970年1月1日格林尼治标准时间00:00:00以来的毫秒数

Claiming Devices(设备声明)

允许ThingsBoard(TB)客户将租户的未分配设备分配给自己,而无需租户的参与。

操作方法:https://thingsboard.io/docs/user-guide/claiming-devices/

CSV导入多个设备

要一次创建多个实体(资产或设备),您需要创建一个CSV文件,其中每一行将负责创建具有给定参数的一个实体。

导入方法见:https://thingsboard.io/docs/user-guide/bulk-provisioning/

测试文件:

特别说明:

遥测数据

简单的Arduino+ESP8266遥测传输:https://thingsboard.io/docs/samples/arduino/temperature/

其他开发板的软硬件连接及传输:https://thingsboard.io/docs/samples/

实体视图

v2.2开始,ThingsBoard的实体视图功能EV启用。其限制了对客户设备或资产的遥测属性的公开程度(如:允许特定的用户查看设置时段内收集的传感器读数,但隐藏如系统错误等调试信息。)

每个设备或资产可以创建多个EV,并分配给不同的客户

具体说明:https://thingsboard.io/docs/user-guide/entity-views/

部件库

ThingsBoard安装随附的有系统级别或租户级别Widgets捆绑包

系统级捆绑包可以由系统管理员管理,并且可供系统中的任何租户使用。租户级别捆绑包可以由**租户管理员管理,**并且仅可由该租户及其客户使用。

具体使用请参阅:小部件开发指南

物联网网关

这是一个开放源代码解决方案,让第三方的IoT设备与Thingsboard相集合。

其功能包括:

  • MQTT扩展:使用现有协议连接到外部MQTT代理的IoT设备的数据。

  • __Sigfox扩展:__用于从连接到Sigfox后端的IoT设备收集数据。

  • __Modbus扩展:__通过Modbus协议连接的IoT设备收集数据。

  • 其他功能扩展:__https://thingsboard.io/docs/iot-gateway/what-is-iot-gateway/

安装

这里依旧以树莓派为例:

  1. 安装Java 8

    IoT网关服务正在Java 8上运行。OracleJava 8已经预装在Raspbian上。您可以使用以下命令检查Java版本。任何高于或等于1.8的Java版本都可以

  2. 下载安装包

    安装包地址

    # Download the package
    $ wget https://github.com/thingsboard/thingsboard-gateway/releases/ download/2.2.1rc/tb-gateway-2.2.1rc.deb
  3. 网关安装并作为服务

    # Install gateway as a service
    $ sudo dpkg -i tb-gateway-2.2.1rc.deb
    # Update gateway memory usage and restrict it to 150MB in /etc/tb-gateway/conf/tb-gateway.conf
    export JAVA_OPTS="$JAVA_OPTS -Dplatform=rpi -Xms150M -Xmx150M"

    网关现已作为服务安装在了Raspberry上

  4. 配置网关

    导航到配置文件夹**/ etc / tb-gateway / conf**并配置与ThingsBoard服务器的连接:

    参见常规配置

  5. 启动网关

    sudo service tb-gateway start
    sudo service tb-gateway restart
  6. 故障排除

    日志文件位于**/ var / log / tb-gateway**文件夹中,TB-gateway.log文件应包含以下行:

    YYYY-MM-DD HH:mm:ss,sss [main] INFO  o.t.gateway.GatewayApplication - Started GatewayApplication in x.xxx seconds (JVM running for x.xxx)

    以发出以下命令以检查后端是否有任何错误:

    cat /var/log/tb-gateway/tb-gateway.log | grep ERROR
  7. 网关包的升级说明 https://thingsboard.io/docs/iot-gateway/install/upgrade-instructions/

多租户配置

在安装并运行了Thingsboard和ThingsBoard IoT Gateway的条件下,同样可以通过tb-gateway.yml配置文件实现不同租户的__共享__

  1. 创建两个带有用户的租户- tenant1@thingsboard.org__和__tenant2@thingsboard.org

  2. 以租户管理员身份登录租户1,进行网关配置:添加设备——勾选"is gateway"选项——复制设备的令牌至某处,对租户2采用相同操作;

    U2nSafTunRHOOD6A4R3u

    PCnSgODwtOrd7tMgohqs

  3. 配置网关

    进入树莓派服务器中的/etc/tb-gateway/conf路径,并配置tb-gateway.yml文件。该文件默认包含一个租户配置,需要在租户下添加第二个租户条目**:**

    gateways:
      tenants:
        -
          label: "Tenant 1"
          reporting:
            interval: 60000
          persistence:
            type: file
            path: storage
            bufferSize: 1000
          connection:
            host: "${GATEWAY_HOST:localhost}"
            port: 1883
            retryInterval: 3000
            maxInFlight: 1000
            security:
              accessToken: "${GATEWAY_ACCESS_TOKEN_1:ACCESS_TOKEN_FOR_TENANT_1}"
          remoteConfiguration: true
        -
          label: "Tenant 2"
          reporting:
            interval: 60000
          persistence:
            type: file
            path: storage
            bufferSize: 1000
          connection:
            host: "${GATEWAY_HOST:localhost}"
            port: 1883
            retryInterval: 3000
            maxInFlight: 1000
            security:
              accessToken: "${GATEWAY_ACCESS_TOKEN_2:ACCESS_TOKEN_FOR_TENANT_2}"
          remoteConfiguration: true
  4. 重启网关

    sudo service tb-gateway restart
    
  5. 重启并验证

    以“ **租户1”**用户身份登录,并验证设备是否已从网关收到更新的遥测数据。租户2应该显示与租户一相同的内容。

数据庫方法

ThingsBard使用数据库存储实体和遥测数据。平台目前支持三个数据库选项:

  • **SQL:**将所有实体和遥测存储在SQL数据库中。ThingsBoard作者建议使用PostgreSQL,这是ThingsBoard支持的主要SQL数据库。可以将HSQLDB用于本地开发目的。除了运行测试和启动具有最小可能负载的dev实例外,我们不建议将HSQLDB用于其他任何事情。
  • **NoSQL:**将所有实体和遥测存储在NoSQL数据库中。ThingsBoard作者建议使用Cassandra,这是ThingsBoard目前支持的唯一NoSQL数据库。在v2.3后,將引入对AWS DynamoDB的支持。
  • 混合: 将所有实体存储在SQL数据库中,并将所有遥测存储在NoSQL数据库中。

可以使用Thingsboard.yml文件配置該類选项。详情请参閲数据库配置页面。

https://thingsboard.io/docs/user-guide/contribution/how-to-contribute/

CE与PE的主要区别

详情见:https://thingsboard.io/products/thingsboard-pe/

REST API

登陆

可以使用Swagger UI探索ThingsBoard REST API。

http://192.168.3.179:8080/swagger-ui.html

验证

点击Swagger UI右上角的“Authorization”按钮进入“ Available authorizations”标题,并使用JWT进行请求身份验证。

JWT令牌需要执行以下请求:

curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{"username":"tenant1@thingsboard.org", "password":"tenant"}' 'http://THINGSBOARD_URL/api/auth/login'
# 获取的值为:
{"token":"$YOUR_JWT_TOKEN", "refreshToken":"$YOUR_JWT_REFRESH_TOKEN"}
  • 替换**$ THINGSBOARD_URL为本地服务地址192.168.3.179:8080**

  • 将“YOUR_JWT_TOKEN”输入至Authorization进行登入

About

对Thingsboard物联网平台的叙述及相关文档汇总