ThingsBoard架构简介

之前介绍了一些thingsboard的使用,今天简单的介绍下thingsboard用到的技术

ThingsBoard使用笔记(1) 安装

 ThingsBoard使用笔记(2)模拟传感器发送MQTT并显示监控图表

ThingsBoard使用笔记(3)模拟控制远程温度传感器

ThingsBoard使用笔记(4)创建资产并在地图上显示

架构

  1. 文档:https://thingsboard.io/docs/reference/architecture/
  2. 并发模型: Actor模型akka Actor模式理解与使用
  3. 集群协作:zookeeper
  4. 支持协议:mqtt、coap、http
  5. 远程调用:  gRPC,thrift
  6. 持久化: Postgresql、Cassandra(https://cassandra.apache.org/数据存储),datastax(数据访问)

包含模块

application

1.common(data,message,transport):

  • data用于与不同db之间的中间数据结构。
  • message定义不同的消息类型。
  • transport定义一个公共的接口,供与客户端的transport层使用

2.dao:

  • dao抽象了对不同数据库的统一接口。
  • dao的接口数据一般都data,根据不同的数据库在不同的接口中转换为对应的实体类与数据库交互.
  • 通过@ConditionalOnProperty(prefix = "database", value = "type", havingValue = "cassandra")动态注入不同的数据库

3.tools:

  • extensions(extension-kafka,extension-mqtt,extension-rabbitmq,extension-rest-api-call):分别调用不同协议的后端服务
  • extensions-api:定义aciton,filter,plugin,processor及其他基本对象
  • extensions-core:实现一些公用aciton,filter,plugin,processor

4.transport(http,caop,mqtt):

  • mqtt基于netty开发mqtt服务器。
  • http提供基于rest的http服务。
  • 基于californium搭建coap服务。
  • 对不同的客户端设备提供不同类型的接口.同时将消息转换成不同的message,通过DefaultActorService与后端的actor交互

规则引擎

  • 规则与插件。基于actors执行。
  • 规则包含Filters,Processors,Action

ui

使用nodejs

相关概念

  • Attributes(https://thingsboard.io/docs/user-guide/attributes/):设备属性
  • Telemetry(https://thingsboard.io/docs/user-guide/telemetry/):设备数据
  • RPC(https://thingsboard.io/docs/user-guide/rpc/):服务器与设备间通信
  • 租户tenant:可以将ThingsBoard租户视为独立的业务实体:拥有或生产设备的个人或组织。
  • 部件库
  • 客户管理:租户和客户的关系,每个客户有对应的资产和设备
  • 实体视图:类似于SQL数据库视图,它限制了基础表暴露给外部世界的程度,TB EV限制了设备或资产遥测和属性暴露给客户的程度。 作为租户管理员,您可以为每个设备或资产创建多个EV,并将其分配给不同的客户。
  • use case:
    与多个客户同时共享特定设备或资产数据。 由于TB安全模型的限制,以前的EV功能无法实现。
    允许特定客户用户查看收集的数据(例如传感器读数),但隐藏调试信息,如电池电量,系统错误等。
    设备即服务(DaaS)模型,其中设备在不同时间段收集的数据属于不同的客户。

数据发送

#遥测数据发送规则
curl -v -X POST -d @dummy_data.json http://<你的IP>:<开放的端口(一般是80)>/api/v1/<访问令牌>

curl -v -X POST -d '{"temperature":21, "humidity":55.0, "active": false}' http://iot.test.com/api/v1/A1_TEST_TOKEN/telemetry --header "Content-Type:application/json"

#发送属性数据
curl -v -X POST -d '{"firmware_version":"1.0.1", "serial_number":"SN-001"}' http://iot.test.com/api/v1/A1_TEST_TOKEN/attributes --header "Content-Type:application/json"

#发送遥测数据
curl -v -X POST -d '{"temperature":21, "humidity":55.0, "active": false}' http://localhost:8080/api/v1/A1_TEST_TOKEN/telemetry --header "Content-Type:application/json"

登陆及数据查看

curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{"username":"[email protected]", "password":"tenant"}' 'http://iot.test.com/api/auth/login'

curl -v -X GET http://iot.test.com/api/plugins/telemetry/DEVICE/e00c4cd0-a885-11e9-884f-57005a69df9c/keys/timeseries \
--header "Content-Type:application/json" \
--header "X-Authorization:Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZW5hbnRAdGhpbmdzYm9hcmQub3JnIiwic2NvcGVzIjpbIlRFTkFOVF9BRE1JTiJdLCJ1c2VySWQiOiJkZmE5NmM1MC1hODg1LTExZTktODg0Zi01NzAwNWE2OWRmOWMiLCJlbmFibGVkIjp0cnVlLCJpc1B1YmxpYyI6ZmFsc2UsInRlbmFudElkIjoiZGY2N2NmNzAtYTg4NS0xMWU5LTg4NGYtNTcwMDVhNjlkZjljIiwiY3VzdG9tZXJJZCI6IjEzODE0MDAwLTFkZDItMTFiMi04MDgwLTgwODA4MDgwODA4MCIsImlzcyI6InRoaW5nc2JvYXJkLmlvIiwiaWF0IjoxNTYzNzc3NDQ5LCJleHAiOjE1NjM3ODY0NDl9.37XPIGd_A2Wpvzk8DJSSnAaXpTvcEbptikgaTK9r5654jyg7A2OklkDTGFRX2OSLZquv7ywpO38iDUt-RfHMCw"


参考资料

参考网址:https://thingsboard.io/docs/getting-started-guides/helloworld/

github地址:https://github.com/thingsboard/thingsboard

演示环境:https://demo.thingsboard.io/login。注册时总提示“请确认不是机器人” 需要google验证

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章