ThingsBoard的领域模型
ThingsBoard是一个开源的物联网平台,用于管理和监控物联网设备和数据。它提供了一个可扩展的架构,可以连接各种设备,并实时收集、处理和分析设备生成的数据。
领域模型
在ThingsBoard中,领域模型是一个关键概念,用于描述物联网系统中的物理实体、属性和行为。以下是ThingsBoard中的主要领域模型组件:
租户(Tenant):租户是ThingsBoard中的顶级组织单位。它代表了一个独立的实体,可以是一个用户、组织或公司。租户拥有和管理自己的设备、客户、规则和仪表板等资源。租户之间的数据和配置是相互隔离的,每个租户都有自己的独立环境。租户由系统管理员创建和管理。
租户配置(TenantProfile):用于定义租户级别的配置和属性。
客户(Customer):客户是租户下的子级实体,代表了物联网系统中的用户或组织。一个租户可以包含多个客户,每个客户都有自己的访问权限和角色。客户可以访问和监控租户下的设备和数据。客户可以有自己的设备、规则和仪表板等资源,但这些资源受到租户级别的限制。客户由租户管理员创建和管理。
用户(User):保存用户的基本信息
- 用户的角色(Authority):SYS_ADMIN、TENANT_ADMIN、CUSTOMER_USER、REFRESH_TOKEN、PRE_VERIFICATION_TOKEN
- 用户凭证(UserCredentials):保存用户的密码、激活用户 Token、重置密码 Token、密码使用历史
- 用户认证设置(UserAuthSettings):保存用户 2FA 认证设置
- 用户设置(UserSettings):保存用户的设置,包括:通用设置、通知、访问过的仪表盘等等
系统设置(AdminSettings):是用于配置和管理整个系统的全局设置和参数,包括:通用设置、邮件、JWT、连接设置等等。
审计日志(AuditLog)
资产(Asset):指在系统中表示和管理的物理或虚拟实体。资产可以是设备、传感器、设施、车辆、建筑物、人员或其他实体,其状态、属性和行为可以被监测、控制和管理。
资产配置(AssetProfile):配置资产使用的默认规则链、队列、移动端仪表盘
设备(Device):
- 遥测数据(TsKV):
- 最新遥测数据:
- 属性(AttributeKvEntry):属性类型分为客户端、服务端、共享
- 远程调用(Rpc)
- 设备凭证(DeviceCredentials):
- OTA:
设备配置(DeviceProfile):配置设备使用的默认规则链、队列、移动端仪表盘、边缘网关默认规则链、分配的固件、分配的软件、传输方式、告警规则、设置预配置
告警(Alarm):包括字段:租户、客户、类型、明细、发起者、告警级别(严重、重要、次要、警告、不确定)、是否应答、是否清除、受理人、开始时间、结束时间、应答时间、清除时间、受理时间、是否传播、是否传播给所有者、是否传播给租户
告警评论(AlarmComment):
实体告警(EntityAlarm):
事件(Event):分为异常事件、组件生命周期事件、规则链调试事件、规则节点事件、统计事件
通知(Notification):
- 通知请求(NotificationRequest)
- 通知模版(NotificationTemplate):
- 通知规则(NotificationRule)
- 通知对象(NotificationTarget)
流程
上报遥测数据
设备配置启用告警规则。温度大于 20 时,产生告警。温度小于 20 时,清除告警。
创建一个设备,设备凭证使用 AccessToken
使用 http api 发送遥测数据
curl -v -X POST http://localhost:8080/api/v1/gs76dj5m47yd3lm1wurd/telemetry --header Content-Type:application/json --data "{temperature:25}"
查看告警
再次发送遥测数据,可以清除告警
源码分析:
使用 http api 发送数据,入口类在 common/transport/http 模块下的 DeviceApiController 类。这个类提供了以下几个接口:
GET /api/v1/{deviceToken}/attributes POST /api/v1/{deviceToken}/attributes GET /api/v1/{deviceToken}/telemetry POST /api/v1/{deviceToken}/telemetry GET /api/v1/{deviceToken}/rpc POST /api/v1/{deviceToken}/rpc POST /api/v1/{deviceToken}/rpc/{requestId} POST /api/v1/{deviceToken}/claim GET /api/v1/{deviceToken}/firmware POST /api/v1/{deviceToken}/firmware GET /api/v1/{deviceToken}/software POST /api/v1/{deviceToken}/software POST /api/v1/provision
POST /api/v1/{deviceToken}/telemetry 处理逻辑:
HttpTransportContext TransportService DefaultTransportService TbQueueProducer<TbProtoQueueMsg<ToRuleEngineMsg>> ruleEngineMsgProducer TbRuleEngineQueueConsumerManager TbRuleEngineConsumerContext ActorSystemContext TbActorRef TbActorMailbox AppActor TenantActor RuleChainActor RuleChainActorMessageProcessor RuleNodeActor RuleNodeActorMessageProcessor TbDeviceProfileNode DeviceState AlarmState DefaultTbContext DefaultTbClusterService TbRuleEngineProducerProvider TbQueueProducer<TbProtoQueueMsg<ToRuleEngineMsg>> toRuleEngine
这里面用到了 Transport 、Queue、Actor ,调用链非常长。