Thingsboard 话题讨论区:https://www.iotschool.com/topics/node8
欢迎大家加入thingsboard 二次开发讨论群:121202538
之前介绍了一些thingsboard的使用,今天简单的介绍下thingsboard用到的技术
架构
文档:https://thingsboard.io/docs/reference/architecture/
并发模型: Actor模型akka Actor模式理解与使用
集群协作:zookeeper
支持协议:mqtt、coap、http
远程调用: gRPC,thrift
持久化: 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,
此框架已实现前后端分离,可以直接把前段编译后,打包成app来使用,支持android 和ios。
不是打web的url,这样访问很慢,要下载的资源很多。
是把前段的js,css,html等资源放在app中,只访问远程api,因为资源都在手机本地,加载会快点。
既然要让本地资源访问远程服务,就要修改angular访问api的路径问题。
打开这个文件ui\src\app\global-interceptor.service.js
这是angularjs的全局拦截器,ajax请求响应 共同部分在这里 。
默认的ajax请求,访问如“/api/”这样的路径,是会去找当前页面说在主机的路径。实际访问的完整路径应该是"http://192.168.1.222:8080/api/" app里面,js运行在本地,而服务url在远程。按默认的就无法访问服务了
global-interceptor.service.js找到这里
if (config.url.startsWith(’/api/’))
{
onfig.url=CUSTOMHOST+config.url;
}
CUSTOMHOST 是我自定义的主机+端口,写你实际服务器就可以了var CUSTOMHOST=" http://192.168.1.101:8888";另外下面response的url判断改下就ok了。
websocket服务器地址同样需要修改
\ui\src\app\api\telemetry-websocket.service.js
完成以上配置后,把前段用webpack打包后,生成html,js 等文件,放到app中,打包即可。
需要懂app打包技术。
相关概念
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验证
————————————————
版权声明:本文为CSDN博主「ieflex」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ieflex/article/details/97106750