产品介绍
ThingsBoard是一套集IOT设备管理、数据采集、数据处理、数据可视化的管理平台。分为社区版、商业版本。
产品特性
开源版本支持的特性包含
- 自定义属性,平台能够为您的实体分配自定义键值属性(例如配置、数据处理、可视化参数)。
- 遥测,时间序列相关的API
- 实体关系,物理建模,以及关联数据的平台级能力
- 数据可视化,可视化功能包含仪表盘、仪表盘状态、设备实时状态、各种自定义图表
- 规则引擎,事件处理的数据处理规则定义
- RPC, 应用程序和仪表盘之间数据数传方式
- 日志审计,用户活动跟踪,API调用情况跟踪
- API 限制,指定时间内根据IP请求限制API的调用次数
- 高级过滤器,根据实体字段、属性进行过滤
产品架构
ThingBoard 架构包含:
- 扩展机制,具备良好的横向扩展能力
- 容错能力,集群中的任一节点都是相同的,没有单点故障
- 健壮高效,ThingsBoard单节点可以处理数十万的设备,根据实际部署情况,集群可以处理数百万台设备
- 可定制化,可以轻松的定制功能、规则引擎、其他组件
- 持久话,数据用不丢失
- 兼容多种物联网协议
环境搭建
前提条件
安装 Docker 环境。自己有两台机器,由于Mac的资源不够。所以这次环境安装用Windows系统,使用docker 安装 ThingsBoard。Windows Docker 安装请自行百度。
运行软件
使用Docker 镜像,ThingsBoard 单节点支持三种不同类型的数据库。
- thingsboard/tb-postgres - 使用 PostgreSQL database. 服务器至少需要1GB 内存,建议2-4GB。
- thingsboard/tb-cassandra - 使用Cassandra 数据库。为了服务器性能至少6GB内存,推荐8BG。
- thingsboard/tb - 使用内嵌的HSQLDB数据库。不建议在生产环境中使用,可以用来开发测试。
我们使用thingsboard/tb-postgres镜像安装,可以根据自己的实际情况使用上面不同的镜像安装。
首先需要在Docker上挂载两个文件
docker volume create mytb-data
docker volume create mytb-logs
消息队列选择
ThingsBoard 具体接入多种消息中间件的能力。用来存储消息以及跟其他服务进行通信,支持以下消息中间件:
In Memory 默认使用内存队列,不建议在生产环境使用,对开发友好。
Kafka 推荐在生产环境中使用。对于企业上云、私有化部署很有帮助。
RabblitMQ 负载量不大的时候 也是选项之一。
AWS SQS 亚马逊云消息管理服务,国内大部分企业应该用不上。
Google Pub/sub Google 云消息管理服务,应该也用不上。
Azure Service Bus 微软云消息管理服务平台。
Confluent Cloud 基于Kafka部署的流式管理平台
启动服务
配置文件
创建Docker compose 启动文件 – docker-compose.yml,内容如下
version: '2.2'
services:
mytb:
restart: always
image: "thingsboard/tb-postgres"
ports:
- "8080:9090"
- "1883:1883"
- "7070:7070"
- "5683-5688:5683-5688/udp"
environment:
TB_QUEUE_TYPE: in-memory
volumes:
- mytb-data:/data
- mytb-logs:/var/log/thingsboard
volumes:
mytb-data:
external: true
mytb-logs:
external: true
内容说明
8080:9090
- HTTP服务8080端口,对应容器内部的9090端口1883:1883
- MQTT协议1883端口7070:7070
- 远程RPC 调用端口70705683-5688:5683-5688/udp
- COAP and LwM2M 协议使用的 UDP 端口 5683-5688~/.mytb-data:/data
- mounts the host’s dir~/.mytb-data
ThingsBoard数据目录~/.mytb-logs:/var/log/thingsboard
- mounts the host’s dir~/.mytb-logs
Thingsboard日志目录mytb
- 服务的名称restart: always
- 服务异常崩溃自动重启机制image: thingsboard/tb-postgres
- 容器启动使用的镜像文件名称
启动服务
# 执行一下命令
docker-compose pull
docker-compose up
服务启动成功后,如上图
登录控制台
浏览器输入http://{your-host-ip}:8080
账号/密码 Thingsboard 提供三种不同类型的账号,分配给每种用户类型的功能是不一样的。
- 系统管理员: sysadmin@thingsboard.org / sysadmin
- 租户管理员: tenant@thingsboard.org / tenant
- 终端用户: customer@thingsboard.org / customer
常用功能
# 查看日志
docker-compose logs -f mytbpe
# 停止容器
docker-compose stop
#启动容器
docker-compose start
系统升级
$ docker pull thingsboard/tb-postgres
$ docker-compose stop
$ docker run -it -v mytb-data:/data --rm thingsboard/tb-postgres upgrade-tb.sh
$ docker rm mytb
$ docker-compose up
接入设备
使用租户账号,登录控制台系统
创建设备
- 点击设备 -> 新增 按钮,添加设备
连接设备
- 获取秘钥 点击数据行,在弹出的DIV上 点击 复制访问令牌
- 发送数据。 Thingboard支持不同的方式模拟设备发送数据,HTTP、MQTT、Coap、其它协议等,我们使用最简单的HTTP 协议进行测试
# curl -v -X POST -d "{\"temperature\": 25}" $THINGSBOARD_HOST_NAME/api/v1/$ACCESS_TOKEN/telemetry --header "Content-Type:application/json"
# 需要按照实际情况 替换上面的IP、token信息
curl -v -X POST -d "{\"temperature\": 25}" http://192.168.0.5:8080/api/v1/9l82TTUZw6VnYsuVXsTN/telemetry --header "Content-Type:application/json"
或者使用POSTMAN
检查数据
点击 设备菜单,点击 http-device 这一行数据
组件可视化
Thingsboard支持自定义可视化组件,我们以上面添加的设备作为前提,小试一波。
创建仪表板
点击仪表板库 选择 创建新的仪表盘
- 打开刚才创建的仪表盘
- 进入编辑模式 新增实体
新增实体
关联之前的设备
添加部件
单击上面的图标,选择对应的展示图表
- 添加数据源 关联实体
如上图,展示报表已经出来了,但是目前是空的,现在写一个测试小程序让他动起来
测试程序
#!/bin/bash
# 每间隔一秒 发送一次温度数据
j=60
for ((i=20; i<=j; i++))
do
echo $i
tt=$i
curl -v -X POST -d "{\"temperature\": $i}" http://192.168.0.5:8080/api/v1/9l82TTUZw6VnYsuVXsTN/telemetry --header "Content-Type:application/json"
sleep 1
if [ $tt -eq 60 ];then
i=0
fi
done