thingsboard
文章目录1ThingsBoard 架构1.1整体架构1.1.1传输组件1.1.2规则引擎组件1.1.3核心服务1.1.4外部系统1.2系统关键组件和相关接口1.2.1ThingsBoard传输1.2.2ThingsBoard核心1.2.3ThingsBoard规则引擎1.2.4消息队列1.2.5SQL与NoSQL与混合数据库1.3微服务架构2代码结构2.1代码一级包总览2.2包说明2.3代码类接口
1 ThingsBoard 架构
1.1 整体架构
官网地址:http://www.ithingsboard.com/docs/reference/monolithic/
1.1.1 传输组件
ThingsBoard提供了基于MQTT、HTTP和CoAP的API可用于您的设备应用程序/固件;每个传输组件都将数据推送到规则引擎并且还可以使用核心服务向数据库发出请求以验证设备凭据等
由于ThingsBoard在传输和核心服务之间使用了非常简单的通信协议,实现对自定义传输协议的支持非常容易例如:通过TCP的CSV、通过UDP的二进制playload等
1.1.2 规则引擎组件
ThingsBoard规则引擎负责使用用户定义的逻辑和流程来处理传入的消息。
1.1.3 核心服务
核心服务负责处理:
1)调用REST API;
2)WebSocket 订阅 有关实体遥测和属性更改的信息;
3)监视设备 连接状态(活动/不活动)。
ThingsBoard节点使用Akka actor系统来实现租户,设备,规则链和规则节点actor(actor用于处理并发,它定义了一系列系统组件应该如何动作和交互的通用规则)。
平台节点可以加入每个节点都相等的集群。服务发现是通过Zookeeper完成的。
ThingsBoard节点使用基于实体ID的一致哈希算法在彼此之间路由消息。
因此用于同一实体的消息在同一ThingsBoard节点上进行处理。
平台使用gRPC 在ThingsBoard节点之间发送消息。
1.1.4 外部系统
可以通过规则引擎将消息从ThingsBoard推送到外部系统。
您可以将数据推送到外部系统,处理数据并将处理结果报告回ThingsBoard以进行可视化。
1.2 系统关键组件和相关接口
官网地址:http://www.ithingsboard.com/docs/reference/
1.2.1 ThingsBoard传输
ThingsBoard提供了基于MQTT、HTTP 和 CoAP 的API,适用于你的设备应用程序/固件。
每个协议API都是由单独的服务器组件提供的并且是ThingsBoard“传输层”的一部分。
MQTT传输还提供网关API供代表多个已连接设备和/或传感器的网关使用。
传输从设备接收到消息后,它将被解析并推送到持久的消息队列。
仅在消息队列确认了相应消息后才将消息传递给设备。
ThingsBoard支持多种消息队列实现:Kafka、RabbitMQ、AWS SQS、Azure服务总线和Google发布订阅
1.2.2 ThingsBoard核心
ThingsBoard Core负责处理REST API调用和WebSocket 订阅。
它还负责存储有关活动设备会话和监视设备连接状态。
ThingsBoard核心在幕后使用Actor来实现主要实体(租户和设备)的actor。
平台节点可以加入群集其中每个节点负责传入消息的某些分区
1.2.3 ThingsBoard规则引擎
ThingsBoard规则引擎是系统的心脏负责处理传入的消息。
规则引擎在幕后使用Actor来实现主要实体的actor:规则链和规则节点。
规则引擎节点可以加入集群,其中每个节点负责传入消息的某些分区。
规则引擎从队列中订阅传入的数据并且仅在处理完消息后才对其进行确认。
有多种策略可用于控制顺序或消息处理以及消息确认的标准。
ThingsBoard规则引擎可能以两种模式运行:共享和隔离
在共享模式下规则引擎处理多个租户的消息。
在隔离模式下规则引擎处理特定租户的消息。
1.2.4 消息队列
ThingsBoard支持多种消息队列实现:Kafka、RabbitMQ、AWS SQS、Azure服务总线和Google发布订阅
我们在特定的队列实现上提供“抽象层”并维护两个主要概念:主题和主题分区
ThingsBoard消息生产者根据实体ID的哈希值确定使用哪个分区。
因此同一实体的所有消息总是被推送到同一分区。
ThingsBoard消息使用者使用Zookeeper进行协调,并使用一致性哈希算法确定每个使用者应订阅的分区列表
ThingsBoard使用以下主题:
tb_transport.api.requests: 发送通用API调用以检查从Transport到ThingsBoard核心的设备凭据。
tb_transport.api.responses: 从ThingsBoard核心到Transport接收设备凭证验证结果。
tb_core: 将消息从传输或规则引擎推送到ThingsBoard核心。消息包括会话生命周期事件属性和RPC订阅等。
tb_rule_engine: 将消息从Transport或ThingsBoard核心推送到规则引擎。消息包括传入遥测、设备状态、实体生命周期事件等。
1.2.5 SQL与NoSQL与混合数据库
ThingsBoard使用数据库进行存储 实体设备,资产,客户,仪表板等)和遥测数据(属性,时间序列传感器读数,统计信息,事件)
• SQL-将所有实体和遥测存储在SQL数据库中。 ThingsBoard作者建议使用PostgreSQL这是ThingsBoard支持的主要SQL数据库。 HSQLDB具有最小的负载可用于本地开发、测试我们不建议将HSQLDB用于任何其他用途。
• NoSQL (已弃用)-将所有实体和遥测存储在NoSQL数据库中。 ThingsBoard作者建议使用Cassandra这是ThingsBoard目前支持的唯一NoSQL数据库。
• 混合-将所有实体存储在SQL数据库中,并将所有遥测存储在NoSQL数据库中。
• 混合 (PostgreSQL + Cassandra) - 将所有实体存储在PostgreSQL数据库中,并将时间序列数据存储在Cassandra数据库中。
• 混合 (PostgreSQL + TimescaleDB) - 将所有实体存储在PostgreSQL数据库中,并将时间序列数据存储在Timescale数据库中。
1.3 微服务架构
官网地址:http://www.ithingsboard.com/docs/reference/msa/
2 代码结构
2.1 代码一级包总览
2.2 包说明
2.3 代码类接口说明
1: 管理控制器(admin-controller):管理控制器显示
2: 报警控制器(alarm-controller):报警控制器显示
3: 资产控制器(asset-controller):资产控制器显示
4: 审核日志控制器(audit-log-controller):审核日志控制器显示
5: 身份验证控制器(auth-controller):身份验证控制器显示
6: 组件描述符控制器(component-descriptor-controller):组件描述符控制器显示
7: 客户控制器(customer-controller):客户控制器显示
8: 仪表板控制器(dashboard-controller):仪表板控制器显示
9: 设备API控制器(device-api-controller):设备API控制器显示
10: 设备控制器(device-controller):设备控制器显示
11: 实体关系控制器(entity-relation-controller):实体关系控制器显示
12: 实体视图控制器(entity-view-controller):实体视图控制器显示
13: 事件控制器(event-controller):事件控制器显示
14: RPC控制器(rpc-controller):RPC控制器显示
15: 规则链控制器(rule-chain-controller):规则链控制器显示
16: 遥测控制器(telemetry-controller):遥测控制器显示
17: 租户控制器(tenant-controller):租户控制器显示
18: 用户控制器(user-controller):用户控制器显示
19: 控件类型控制器(widget-type-controller):控件类型控制器显示
20: 控件束控制器(widgets-bundle-controller):控件束控制器显示
3 Thingsboard源码运行
https://blog.csdn.net/weixin_38323645/article/details/123464355?spm=1001.2014.3001.5502
4 规则链、设备配置、设备
4.1 规则链添加
添加后从列表点进来
4.2 设备配置创建
第1点和第4点配置下
4.3 添加设备
输入名称,选择设备配置后,直接点添加
5 模拟数据采集
5.1 http传输
规则链开启调试模式
在设备详情中复制访问令牌
http方式请求模拟数据采集
tb swagger-ui地址(要登录通过验证后可进行接口调用)
http://localhost:8080/swagger-ui/#/device-api-controller/postTelemetryUsingPOST
请求
请求成功后,查看设备详情中的最新遥控数据
如果再次发送请求,key和前面的请求重复则将会覆盖掉前面一次value值
5.2 mqtt传输
官网说明:http://www.ithingsboard.com/docs/getting-started-guides/helloworld/
0)设备配置的传输方式为MQTT
1)首先全局安装mqtt
npm install mqtt -g
并配置环境变量:
NODE_PATH %AppData%\npm\node_modules
AppData C:\Users\13795\AppData\Roaming
2)创建一个文件夹,用于存放以下必要文件
文件内容参照官网,其中,mqtt-js.bat文件中:
THINGSBOARD_HOST设置为transport-mqtt的端口,
ACCESS_TOKEN设置为设备的访问令牌
双击执行mqtt-js.bat,即可发送数据到tb
若中文出现乱码,修改一下编码即可
6 警告产生与消除
警报的官方说明:http://www.ithingsboard.com/docs/user-guide/alarms/
6.1 警报
1) 创建警报规则链(注意开启调试模式),整体节点如下:
其中
script为筛选器,可自定义规则:当pm25大于200时候返回true,否则返回false
返回true时候,产生警报,可以自定义警报信息及计算警报次数
返回false时候,消除警报
2) 创建一个新规则链,并将上步骤创建的警报链alarm_chain引入,整体节点如下
3)创建设备配置,选择new_rule_chain规则链,并在设备预配置中的预配置策略项选择允许创建新设备,创建后详情如下
4) 创建设备,选择上一步骤创建的设备配置dp1
5)测试(参照模拟数据采集进行测试)
改变值再测试
6.2 创建警报仪表板
1)
2)打开仪表板编辑,添加新部件
添加额外字段信息,选择status添加
编辑刚添加的status,改为自定义字段
一共添加了3个自定义字段
可以看到:
还可以看到详情信息
更多推荐
所有评论(0)