看看它如何运行。
一条消息如何被处理。
设备通过 MQTT、HTTP、Sparkplug B 或 LwM2M 发送消息。DeviceChain 解码消息并识别设备后,将事件交给各服务存储、更新设备当前状态并评估规则。匹配的规则触发相应动作,各服务通过 NATS JetStream 通信。
不同客户或业务部门可以共用一套部署,数据库和消息总线都按租户隔离。运营方管理部署及其租户。多租户文档介绍了隔离方式。
数据接入
支持内置 NATS 消息代理上的 MQTT、HTTP POST、Sparkplug B 主机应用,以及基于 CoAP/DTLS 的 LwM2M 服务。后两者是可选服务。传输能力矩阵列出了各协议在不同方向上的支持情况。
检测
规则采用阈值、持续时间或数据缺失等明确的条件类型。条件可以写成简单比较,也可以写成 CEL(通用表达式语言)表达式,并在所选设备的事件到达时进行评估。
响应
规则可以触发告警、向设备下发指令、调用 webhook,或发布到 MQTT、Kafka、Amazon SNS 和 Amazon SQS。
指令
设备配置声明指令及其参数。DeviceChain 存储每个请求并跟踪状态,包括投递、设备响应和失败。
有类型、可版本化的设备配置。
设备类型描述电表、冷柜或卡车等设备。每种类型使用一份设备配置,定义测量指标、指令和检测规则。多个类型可以共用一份配置。你可以编辑草稿、发布版本,或回滚到早期版本。
将设备与客户、场地或资产关联,再通过这些关系查找读数。有类型的关系也能描述设备与其他实体之间的连接。
- 设备配置
- 测量指标、有类型的指令定义和检测规则,以版本形式发布。
- 关系图
- 实体之间有类型、有方向的关系。属性可以声明为分面,从而同时按场地、产品线和所有者等多个维度浏览和筛选。
- 动态分组
- 用 CEL 表达式筛选实体属性。每次读取分组时,通过带索引的数据库查询确定成员。
- 客户、区域与资产
- 设备可以分配给客户、区域和资产。资产以父子树组织;区域是有名称的地点,其边界由独立的地理围栏定义。每个事件记录写入时设备的关联关系,因此设备重新分配后,历史记录仍保留原有上下文。
- 凭据与设备更换
- 设备保留稳定的标识令牌,凭据独立管理并可轮换。更换故障硬件时,一次操作即可停用旧设备凭据,同时保留设备历史。
- 实时状态
- 查看各测量指标的最新值及设备是否在线。MQTT、Sparkplug B 和 LwM2M 直接报告连接与断开;HTTP 设备持续发送数据时视为在线。
用历史数据测试规则。
使用已存储的事件预览规则草稿,查看条件何时会触发。预览与实时处理使用同一套规则编译器和引擎。
发布前可在自动化画布中运行预览。预览从空规则状态开始,不加载设备属性或应用分组范围,并报告跳过的读数和达到的限制。检测引擎文档列出了这些限制。
- 三种规则编写方式
- 使用设备配置中的表单、可视化自动化画布,或在启用可选 AI 服务后用自然语言描述规则。
- 告警
- 告警跟踪激活、已确认和已解除状态,也可以改变严重程度。解除方式取决于规则;某些时间窗口规则需要新事件到达后才能解除。
- 八种规则类型
- 阈值、变化率、重复、持续时间、数据缺失、窗口聚合、区域关联和连接状态。数据缺失与连接状态规则可以发现停止上报或断开连接的设备。
- 地理围栏
- 在控制台绘制围栏,或通过 API 提交带孔洞的多边形。规则条件可以使用
geo.inFence(...)判断是否位于围栏内。每个位置事件携带到达时生效的围栏集版本,重放时使用当时的围栏。 - 作用范围
- 规则定义在设备配置中,大多数类型可进一步限定到动态分组。事件到达时会记录分组成员关系。
用自然语言描述规则。
启用可选 AI 服务后,可以输入“冷柜温度高于 -15°C 持续十分钟时,触发严重告警”,获得规则草稿。草稿与手写规则使用同一编译器。服务可根据编译错误修改草稿,最多尝试固定次数,最终返回有效草稿或无法解决的错误。发布前请检查规则;编译检查的是结构,不是规则是否符合你的意图。
已发布规则运行时不调用模型。要启用 AI 规则编写,运营方需注册 AI 提供商、为租户开放模型,并记录租户对外部推理的同意。这三项全部完成前,该功能不可用。也可以完全不启用此服务。
可嵌入、可版本化的仪表盘。
仪表盘属于某个租户,支持草稿、已发布版本和回滚。在设备上线前,可用合成数据构建仪表盘,再将同一布局绑定到实际设备群。
在自己的 React 应用中展示仪表盘时,从 npm 安装运行时包(@devicechain/widgets、@devicechain/dashboards 和 @devicechain/client)。独立查看器让用户无需进入管理控制台即可访问仪表盘。
用 SQL 查询遥测数据。
遥测数据存储在 PostgreSQL 扩展 TimescaleDB 中。配置分析只读角色后,可使用 Metabase、Grafana、Power BI 或 psql 等兼容 PostgreSQL 的工具直接查询。
每个租户可以拥有独立只读角色,访问分析模式中的事件、测量值、每分钟汇总、位置、告警和连接变化视图。数据库按读取者的租户过滤这些视图。位置数据需要另行授权。SQL 与 BI 指南介绍了配置步骤。
- 只读角色
- 每个租户拥有独立登录角色,只读访问分析视图。由你决定为哪些租户开放读取权限。
- 也可以使用 API
- 应用通过 GraphQL API 读取数据,使用的底层表与分析视图相同。
GraphQL、客户端 SDK 与 MCP。
API 使用 GraphQL,平台每个功能领域都有独立模式,模式文件随文档发布。TypeScript 客户端 SDK 在 npm 上发布(@devicechain/client),.NET SDK 在 NuGet 上发布(DeviceChain.Sdk)。.NET SDK 包含提前编译检查;从源码构建的 Unity 包通过 Unity 传输层封装该 SDK。
可选的模型上下文协议(MCP)服务允许 Claude、Cursor 或 VS Code 等 AI 助手读取设备、状态、遥测、告警和指令。调用使用已登录用户的令牌和权限。服务仅开放选定的只读工具,不暴露完整 API。
- GraphQL
- 每个平台功能领域都有独立模式,并发布模式文件。
- SDK
- TypeScript SDK 在 npm 发布,C#/.NET SDK 在 NuGet 发布,另有 Unity 包。
- MCP
- 采用 OAuth 2.1 的资源服务器,提供只读工具,访问范围限定在用户所属租户。
运行在 Kubernetes 上,使用 PostgreSQL 和 NATS。
实体数据存储在 PostgreSQL 中,遥测数据存储在 TimescaleDB 中。NATS JetStream 承载内部消息、充当 MQTT 消息代理并保存键值状态。安装流程会配置这些组件。
dcctl 是一个包含 Helm chart 和 OpenTofu 配置的独立二进制程序。它调用 docker、kubectl、helm 和 OpenTofu(或 Terraform),这些工具需先安装;本地集群还需要 kind(Docker 中的 Kubernetes)。dcctl install 准备集群,dcctl bootstrap 在集群上创建实例。两条命令也可使用已有集群。安装和初始化流程在 kind 上进行端到端测试,你也可以用它在笔记本电脑上运行 DeviceChain。仓库还包含 OpenTofu 配置,可创建具有独立数据库和服务节点池的 Google Kubernetes Engine 集群。
在一个 Google Kubernetes Engine 集群上,采用默认值的高可用部署在两个并入 v0.22.0 的开发构建上,各自持续十分钟维持每秒 10,000 个事件。集群包含三个 4 vCPU、16 GB 的数据库节点和三个 4 vCPU、8 GB 的服务节点。逐事件核对未发现缺失、重复或意外存储的事件。测试中,各服务和消息代理的 stream leader 被固定在服务节点间同一种均衡的放置方式上;在由调度器决定放置时,v0.19.0 发布候选版本以同样方式测得每秒 6,000 个事件。每个事件携带一个读数。测试使用单个租户,并提高了该租户的接入上限;默认上限为每秒 1,000 个读数,在此设置下,单个租户的设备最多每秒获准接入 5,000 个读数。实测吞吐量文档列出了测试条件和资源设置。这些结果仅描述该工作负载和集群,不是容量保证。
默认集群安装还会配置 Prometheus、Grafana 和 Alertmanager,以及平台告警规则和仪表盘。启用备份后,两个数据库持续归档以支持时间点恢复。恢复和故障切换通过运行中集群上的脚本演练验证;只有备份前存储的密钥在恢复后仍能解密,恢复演练才算通过。
运维与治理。
告警通知、对外投递、审计、租户限额、数据保留和租户删除。
通知
按租户配置策略,根据告警严重程度发送邮件或 webhook,并升级无人确认的告警。升级机制可在多个副本上安全运行。
对外连接器
独立服务将规则动作投递到 webhook、MQTT、Kafka、Amazon SNS 和 Amazon SQS。
出站访问边界
默认阻止出站连接访问回环、私有、运营商级 NAT、链路本地和云元数据地址。运营方可为实例允许指定目标地址或地址范围。
审计日志
审计日志记录控制平面实体的变更及操作者,不包含遥测和派生状态。租户删除后保留审计记录,但移除姓名和邮箱地址。
治理
为每个租户设置数据接入、对外动作、AI 请求和排队指令的限额,将共享部署中的租户负载控制在你设定的范围内。
数据生命周期
TimescaleDB 超表支持压缩、数据保留和用于每分钟汇总的连续聚合。
租户删除
删除租户会立即撤销登录,并在约一分钟内拒绝新的连接、数据接入和指令。随后清除数据库、遥测存储、消息代理、对象存储、键值存储和运行中规则引擎内的租户数据,并记录各组件的处理结果。备份按独立周期过期:默认情况下,核心数据可恢复 30 天,遥测数据可恢复 7 天。
密钥
集成密钥加密存储,通过句柄引用,API 仅允许写入。
品牌定制
支持租户级品牌设置,未配置时依次采用运营方默认设置和内置外观。
设备模拟
dcctl sim 设置场景,从源码构建的模拟器创建客户、区域、资产和设备,再通过与真实设备相同的传输路径发送实时遥测数据。
边缘代理
网络中断时缓冲到磁盘(默认 1 GiB,满时丢弃最旧事件),连接恢复后转发。重放缓冲时,JSON 事件只存储一次,其他载荷格式可能重复存储。
在笔记本电脑上试用。
首台设备快速入门约需半小时,包含初始化时间。在 kind 上启动实例,创建设备,用 curl 发送读数,然后在控制台查看。
DeviceChain 尚未发布 1.0。它是 SiteWhere IoT 平台的重写版本。模拟器和 Unity 包从源码构建,客户端 SDK 单独发布。升级前请阅读发布说明:某些 1.0 前的变更需要重新安装。API 和数据库模式仍可能变化,发布说明会优先列出破坏性变更(参见1.0 前的稳定性说明)。如果遇到问题,请告诉我们复现步骤和预期结果。联系我们。