1. 概述
本文主要研究 thingsboard 各种实体在关系型数据库 postgres 中的存储。
2. 安装与配置使用 Postgresql 数据库
从源码编译安装参考 : https://thingsboard.io/docs/user-guide/contribution/how-to-contribute/
编译运行后,需创建 thingsboard 数据库:
psql -U postgres -d postgres -h 127.0.0.1 -W
CREATE DATABASE thingsboard;
\q
Postgresql 的基本使用,见 http://www.atjiang.com/postgresql-beginner-11-tasks/
Thingsboard v2.4 中,默认使用的数据库用户名和密码都是 postgres, 见 /application/src/main/resources/thingsboard.yml
:
datasource:
driverClassName: "${SPRING_DRIVER_CLASS_NAME:org.postgresql.Driver}"
url: "${SPRING_DATASOURCE_URL:jdbc:postgresql://localhost:5432/thingsboard}"
username: "${SPRING_DATASOURCE_USERNAME:postgres}"
password: "${SPRING_DATASOURCE_PASSWORD:postgres}"
创建 schema 并导入测试数据:
cd ~/workspace/thingsboard/application/target/bin/install
chmod +x install_dev_db.sh
./install_dev_db.sh
登录测试
http://127.0.0.1:8080/
用户名 tenant@thingsboard.org
密码 tenant
实体
Tenants 租户
是一个独立的商业实体:比如个人或组织,可以拥有若产生多个设备或资产。一个租户可有多个租户管理员用户及多个客户。
可将它理解为代理商,中间商,如中国移动是一个 tenant, 承包了某地区的所有项目,信息保存在 tenant
表中。
Customers 客户
也是一个独立的商业实体:如何个人或组织,客户从租户那购买设备和资产。一个客户中可有多个用户。
可将它理解为甲方客户,如某单位或企业,从租户中国移动那购买服务。
信息保存在 customer
表中, 通过 tenant_id
关联相应的 tenant。
Users 用户
用户登录系统,查看信息并管理实体的账号。系统中创建的用户,保存于 tb_user
中。
通过 customer_id
和 tenant_id
关联相应的租户和客户,用户权限由 authority
字段指定,值见:
// thingsboard/common/data/src/main/java/org/thingsboard/server/common/data/security/Authority.java
public enum Authority {
SYS_ADMIN(0),
TENANT_ADMIN(1),
CUSTOMER_USER(2),
REFRESH_TOKEN(10);
}
customer_id 和 tenant_id 有一个默认的值 1b21dd2138140008080808080808080,该值应该为系统中的一个默认 Tenant 和 Customer 值。
例如系统管理员账户 “sysadmin@thingsboard.org” 对应的 customer_id 和 tenant_id 即为该值。
Devices 设备
设备可上传遥测数据或执行 RPC 命令。
保存于 device
表中,通过 customer_id
和 tenant_id
关联相应的租户和客户。设备类型由 type
字符串字段指定,默认为 default
, 可自由创建新值。
新建的设备,其默认 customer_id 为 1b21dd2138140008080808080808080,该值应该为系统中的一个默认 Customer 值。
通过设备管理界面可以分配给指定客户。
设备的访问凭证信息保存在表 device_credentials
中,类型由 credentials_type
字段指定,类型值见:
// thingsboard/common/data/src/main/java/org/thingsboard/server/common/data/secur