这是本节的多页打印视图。
点击此处打印.
返回本页常规视图.
平台端 API
通过 Inteagle 结构健康监测平台对接
本章节介绍如何将您的系统与 Inteagle 结构健康监测平台对接。
推荐方式:使用 SDK
强烈推荐使用官方 Java SDK 进行开发,SDK 封装了认证、API 调用、数据解析等功能,简化开发流程。
// Maven 依赖
<dependency>
<groupId>com.inteagle</groupId>
<artifactId>shm-sdk</artifactId>
<version>0.3.1</version>
</dependency>
// 快速使用
InteagleClient client = InteagleClient.builder()
.apiEndpoint("https://api.shm.inteagle.com")
.credentials(accessKey, secretKey)
.build();
// 查询项目
List<Project> projects = client.projects().list();
Go SDK 即将推出,敬请期待。
详见 SDK 仓库 和 快速入门
对接方式
| 方式 | 用途 | 协议 |
|---|
| SDK(推荐) | 项目/设备/数据查询 | HTTP |
| MQTT 订阅 | 实时数据推送 | MQTT |
文档导航
1 - 核心概念
理解 Inteagle 结构健康监测平台的数据模型与业务流程
理解平台的核心概念有助于更高效地使用SDK和API。
数据模型
Inteagle 结构健康监测平台采用三层数据模型:
graph TD
subgraph L1["第一层 - 租户层"]
A[客户 Customer]
end
subgraph L2["第二层 - 项目层"]
B[项目 Project]
end
subgraph L3["第三层 - 数据采集层"]
C1[监测点<br/>Monitoring Point<br/>业务视角]
C2[设备<br/>Device<br/>物理设备]
end
subgraph DATA["数据层"]
D1[监测点数据<br/>dx dy tilt]
D2[设备原始数据<br/>标靶坐标]
end
A -->|1:N 包含| B
B -->|1:N 包含| C1
B -->|1:N 包含| C2
C1 -->|1:N 产生| D1
C2 -->|1:N 上报| D2
C1 <-.->|N:M 多对多映射| C2
style A fill:#e1f5ff,stroke:#01579b,stroke-width:3px
style B fill:#fff4e1,stroke:#e65100,stroke-width:3px
style C1 fill:#f3e5f5,stroke:#4a148c,stroke-width:2px
style C2 fill:#f3e5f5,stroke:#4a148c,stroke-width:2px
style D1 fill:#e8f5e9,stroke:#1b5e20,stroke-width:1px
style D2 fill:#e8f5e9,stroke:#1b5e20,stroke-width:1px核心特点:
- 第一层(租户层):客户级数据隔离
- 第二层(项目层):一个项目对应一个监测工程
- 第三层(数据采集层):
- 监测点:业务视角,反映监测需求
- 设备:物理设备,采集原始数据
- 关键:监测点 ↔ 设备 是多对多映射关系
层级关系
| 层级 | 说明 | 用途 | ID |
|---|
| 客户 | 租户隔离 | 数据权限控制 | cust_abc123 |
| 项目 | 监测工程 | 业务组织单元 | proj_abc123 |
| 监测点 | 业务测点 | 展示监测指标(如位移、倾斜) | pt_xyz789 |
| 设备 | 物理设备 | 采集原始数据 | dev_001 |
核心实体
项目 (Project)
监测工程的顶层容器,对应一个实际的工程项目(如桥梁监测、边坡监测)。
属性:
- 项目名称、编号
- 监测类型(桥梁/隧道/边坡/环境等)
- 地理位置
- 起止日期
包含:
典型项目场景:
场景 1:桥梁监测项目
graph TD
P1[桥梁监测项目]
P1 --> PT1["位移监测点 x10"]
P1 --> PT2["倾斜监测点 x4"]
P1 --> PT3["应变监测点 x8"]
P1 --> PT4["环境监测点 x2"]
P1 --> D1["设备: V2K x6, X1 x4, O1 x8"]
style P1 fill:#fff4e1
style PT1 fill:#f3e5f5
style PT2 fill:#f3e5f5
style PT3 fill:#f3e5f5
style PT4 fill:#f3e5f5
style D1 fill:#e1f5ff场景 2:隧道监测项目
graph TD
P2[隧道监测项目]
P2 --> PT1["收敛监测点 x15"]
P2 --> PT2["沉降监测点 x20"]
P2 --> D2["设备: V2K x10, X1 x5"]
style P2 fill:#e3f2fd
style PT1 fill:#f3e5f5
style PT2 fill:#f3e5f5
style D2 fill:#e1f5ff场景 3:环境监测项目
graph TD
P3[环境监测项目]
P3 --> PT1["环境监测点 x5"]
P3 --> D3["环境传感器 x5"]
style P3 fill:#e8f5e9
style PT1 fill:#f3e5f5
style D3 fill:#e1f5ff监测点 (Monitoring Point)
业务视角的测量点,聚合了来自设备的监测指标。
特点:
- 业务导向:反映实际的监测需求(如"3号桥墩位移")
- 指标聚合:可从多个设备/通道汇总数据
- 多对多关系:
- 一个监测点可以从多个设备的数据组合而成
- 一个设备可以为多个监测点提供数据(如视觉位移计设备可为多个监测点提供数据)
- 场景化配置:不同监测场景下,监测点关注的指标类型不同
监测点类型与场景:
| 监测场景 | 监测点类型 | 典型指标 | 应用示例 |
|---|
| 桥梁/结构监测 | 位移监测点 | dx, dy, dz, settlement | 桥墩位移、梁体沉降 |
| 倾斜监测点 | tilt | 桥塔倾斜、墩台倾角 |
| 应变监测点 | strain, stress | 主梁应变、关键截面应力 |
| 裂缝监测点 | crack, crackRate | 混凝土裂缝宽度 |
| 隧道/基坑监测 | 收敛监测点 | dx, dy | 隧道净空收敛 |
| 沉降监测点 | dz, settlement | 地表沉降、周边建筑沉降 |
| 边坡/地质监测 | 深层位移监测点 | dz (分层) | 深层土体位移 |
| 裂缝监测点 | crack | 边坡裂缝发展 |
| 环境监测 | 环境监测点 | temperature, humidity, pressure | 施工环境、设备工作环境 |
详细监测点类型参见 数据字典 - 监测点类型
示例 1:多设备融合 → 一个监测点(3D 空间位移)
典型应用:通过两台视觉位移计的三角测量,融合计算出 3D 空间位移。
graph TD
PT[监测点<br/>桥墩A-3D位移监测点<br/>输出: dx, dy, dz]
D1[设备1 V2W<br/>标靶1]
D2[设备2 V2W<br/>标靶1]
L1[local坐标<br/>dx1, dy1]
L2[local坐标<br/>dx2, dy2]
FUSION[三维融合算法]
D1 -->|测量| L1
D2 -->|测量| L2
L1 --> FUSION
L2 --> FUSION
FUSION -->|计算| PT
style PT fill:#fff4e1,stroke:#e65100,stroke-width:3px
style D1 fill:#e1f5ff
style D2 fill:#e1f5ff
style FUSION fill:#ffe0b2,stroke:#f57c00,stroke-width:2px两台设备各自测量标靶在自己 local 坐标系下的 dx, dy,通过三维融合算法(空间几何计算)得到 global 坐标系下的完整 3D 位移(dx, dy, dz)。
示例 2:一个设备 → 多个监测点
graph TD
D[设备 dev_001<br/>V2K 2靶位移计]
T1[标靶1]
T2[标靶2]
PT1[监测点A<br/>桥墩A位移]
PT2[监测点B<br/>桥墩B位移]
D --> T1
D --> T2
T1 --> PT1
T2 --> PT2
style D fill:#e1f5ff
style PT1 fill:#fff4e1
style PT2 fill:#fff4e1设备 (Device)
物理传感器/采集设备,上报原始测量数据。
VDM 视觉位移计系列:
所有 视觉位移计设备均基于视觉测量原理,可测量多个标靶。不同型号在视觉传感器数量(单目/双目)、云台功能(固定式/旋转式)、连接方式(有线/无线)上有所差异。
型号分类:
- 固定式:V1(单目)、V2K(双目)、V2W(双目) - 安装角度固定或可手动调整
- 旋转式:O1(单目单轴)、X1(单目双轴)、X2W(双目双轴) - 支持云台控制和自动巡航
详细型号规格参见 数据字典 - 设备类型
遥测数据 (Telemetry)
遥测数据是设备上报的时序监测数据,是平台的核心数据类型。
HTTP API 响应格式
通过 HTTP API 查询历史遥测数据时,返回按指标分组的时间序列:
| 字段 | 类型 | 说明 |
|---|
ts | Long | 时间戳(毫秒级 Unix 时间戳) |
value | Number | 测量值 |
示例:
{
"dx": [
{ "ts": 1735560000000, "value": 0.05 },
{ "ts": 1735563600000, "value": 0.06 }
],
"dy": [
{ "ts": 1735560000000, "value": 0.02 },
{ "ts": 1735563600000, "value": 0.03 }
]
}
注意:MQTT 实时推送格式不同,详见 MQTT 数据订阅。
时间戳约定
| 约定 | 说明 |
|---|
| 单位 | 毫秒(milliseconds) |
| 时区 | UTC(接口返回的时间戳均为 UTC) |
| 格式 | Unix 时间戳,如 1735560000000 |
时间转换示例:
UTC 时间戳: 1735560000000
UTC 时间: 2024-12-30T12:00:00Z
北京时间: 2024-12-30 20:00:00 (UTC+8)
告警系统 (Alarm)
告警系统采用四态状态模型,支持完整的告警生命周期管理。
告警生命周期
stateDiagram-v2
[*] --> ACTIVE_UNACK: 触发告警
ACTIVE_UNACK --> ACTIVE_ACK: 确认
ACTIVE_UNACK --> CLEARED_UNACK: 自动清除
ACTIVE_ACK --> CLEARED_ACK: 自动清除
CLEARED_UNACK --> CLEARED_ACK: 确认
CLEARED_ACK --> [*]: 归档告警状态说明
| 状态 | 活跃 | 已确认 | 说明 |
|---|
ACTIVE_UNACK | ✅ | ❌ | 新告警,待处理 |
ACTIVE_ACK | ✅ | ✅ | 已确认,处理中 |
CLEARED_UNACK | ❌ | ❌ | 已恢复,未确认 |
CLEARED_ACK | ❌ | ✅ | 已恢复,已确认 |
告警级别 (3A 体系)
平台采用 3A 告警级别体系:
| 级别 | 颜色 | 说明 | 典型响应 |
|---|
ALERT | 🟡 黄色 | 预警 | 关注,无需立即处理 |
ALARM | 🟠 橙色 | 报警 | 需要处理 |
ACTION | 🔴 红色 | 紧急 | 立即行动 |
详细告警定义参见 数据字典 - 告警级别
告警触发流程
sequenceDiagram
participant D as 设备
participant I as Inteagle平台
participant C as 第三方云平台
D->>I: 上报遥测数据
I->>I: 检查告警规则
alt 超过阈值
I->>I: 创建告警 (ACTIVE_UNACK)
I-->>C: MQTT 推送告警
end
alt 恢复正常
I->>I: 清除告警 (CLEARED_*)
I-->>C: MQTT 推送清除
end
数据访问方式
Inteagle 提供 SDK,集成了 HTTP 和 MQTT 两种通道,配合使用获取完整的数据能力。
SDK 集成的两种通道
| 通道 | 协议 | 用途 | SDK 方法 |
|---|
| 查询通道 | HTTP | 查询项目、监测点、设备、历史数据 | client.projects(), client.telemetry() |
| 订阅通道 | MQTT | 接收实时遥测、告警推送 | client.subscribe() |
典型使用流程
- 初始化:通过 HTTP 查询项目、监测点列表
- 加载历史:通过 HTTP 查询历史遥测数据
- 实时更新:通过 MQTT 订阅接收实时数据推送
下一步
根据您的需求选择阅读路径:
2 - 快速入门
SDK 使用教程
本指南帮助您快速使用 SDK 对接 Inteagle 结构健康监测平台。
前置条件
- 已获取 Access Key 和 Secret Key(联系销售获取)
SDK 安装
SDK 仓库:https://github.com/inteagle-vision/shm-sdk
Java SDK
<dependency>
<groupId>com.inteagle</groupId>
<artifactId>shm-sdk</artifactId>
<version>0.3.1</version>
</dependency>
dependencies {
implementation 'com.inteagle:shm-sdk:0.3.1'
}
Go SDK
Go SDK 即将推出,敬请期待。
快速开始
1. 创建客户端
import com.inteagle.shm.InteagleClient;
InteagleClient client = InteagleClient.builder()
.apiEndpoint("https://api.shm.inteagle.com")
.credentials("your-access-key", "your-secret-key")
.build();
2. 查询项目
// 查询项目列表
List<Project> projects = client.projects().list();
for (Project project : projects) {
System.out.println("项目: " + project.getName());
System.out.println("ID: " + project.getId());
}
// 查询项目详情
Project project = client.projects().get("project-id");
3. 查询监测点
// 查询项目下的监测点
List<MonitoringPoint> points = client.points().listByProject("project-id");
for (MonitoringPoint point : points) {
System.out.println("监测点: " + point.getName());
}
// 查询监测点详情
MonitoringPoint point = client.points().get("point-id");
4. 查询设备
// 查询项目下的设备
List<Device> devices = client.devices().listByProject("project-id");
// 查询设备详情
Device device = client.devices().get("device-id");
System.out.println("设备状态: " + (device.isOnline() ? "在线" : "离线"));
5. 查询遥测数据
// 查询监测点最新数据
TelemetryResult latest = client.telemetry()
.entity("POINT", "point-id")
.latest();
System.out.println("dx: " + latest.getValue("dx"));
System.out.println("dy: " + latest.getValue("dy"));
// 查询历史数据
long endTs = System.currentTimeMillis();
long startTs = endTs - 24 * 60 * 60 * 1000; // 最近24小时
TelemetryResult history = client.telemetry()
.entity("POINT", "point-id")
.timeRange(startTs, endTs)
.metrics("dx", "dy")
.query();
6. 查询告警
// 查询活动告警
List<Alarm> alarms = client.alarms()
.projectId("project-id")
.status("ACTIVE")
.list();
for (Alarm alarm : alarms) {
System.out.println("告警: " + alarm.getType());
System.out.println("级别: " + alarm.getSeverity());
}
7. 查询告警规则
// 查询项目的告警规则
List<AlarmRule> rules = client.alarmRules()
.projectId("project-id")
.list();
for (AlarmRule rule : rules) {
System.out.println("规则: " + rule.getName());
System.out.println("启用: " + rule.isEnabled());
}
命令行工具
SDK 提供命令行工具 shm-cli,方便调试和测试:
# 配置凭证
shm-cli config --access-key YOUR_KEY --secret-key YOUR_SECRET
# 查询项目
shm-cli projects list
# 查询监测点
shm-cli points list --project PROJECT_ID
# 查询遥测数据
shm-cli telemetry latest --entity-type POINT --entity-id POINT_ID
# 查询告警规则
shm-cli alarm-rules list --project PROJECT_ID
下一步
3 - MQTT 数据订阅
实时数据推送
Inteagle 结构健康监测平台提供 MQTT 实时数据推送服务。
连接信息
| 参数 | 值 |
|---|
| 服务器 | broker.shm.inteagle.com |
| 端口 | 8883 (TLS) |
| 协议 | MQTT 3.1.1 / 5.0 |
认证
| 参数 | 值 |
|---|
| 用户名 | 客户 ID |
| 密码 | Access Token |
| Client ID | 自定义(建议:{customerId}_{appName}) |
Topic 结构
inteagle/{customerId}/p/{projectId} # 项目所有数据
inteagle/{customerId}/p/{projectId}/mp/{pointId} # 监测点数据
inteagle/{customerId}/p/{projectId}/d/{deviceId} # 设备数据
订阅示例:
# 项目所有数据
inteagle/cust_abc123/p/proj_abc/#
# 所有监测点
inteagle/cust_abc123/p/proj_abc/mp/+
# 单个设备
inteagle/cust_abc123/p/proj_abc/d/dev_001
消息格式
所有消息包含 type 字段区分数据类型:
遥测数据
{
"type": "telemetry",
"ts": 1735560000000,
"payload": {
"pointId": "point_001",
"data": {"dx": 0.05, "dy": 0.02}
}
}
告警
{
"type": "3A",
"ts": 1735560000000,
"payload": {
"id": "alm_001",
"severity": "alert",
"status": "ACTIVE_UNACK",
"originator": {"entityType": "POINT", "id": "point_001"},
"detail": {"metric": "dx", "value": 12.5, "threshold": 10.0}
}
}
代码示例
import paho.mqtt.client as mqtt
import json
def on_connect(client, userdata, flags, rc):
print(f"Connected: {rc}")
client.subscribe("inteagle/cust_abc123/p/proj_abc/#")
def on_message(client, userdata, msg):
data = json.loads(msg.payload.decode())
if data['type'] == 'telemetry':
print(f"遥测: {data['payload']}")
elif data['type'] == '3A':
print(f"告警: {data['payload']['severity']}")
client = mqtt.Client()
client.username_pw_set("cust_abc123", "your_token")
client.tls_set()
client.on_connect = on_connect
client.on_message = on_message
client.connect("broker.shm.inteagle.com", 8883)
client.loop_forever()
QoS 建议
| 数据类型 | QoS | 说明 |
|---|
| 遥测 | 0 | 允许少量丢失 |
| 告警 | 1 | 确保送达 |
3.1 - 项目与监测点数据
项目聚合数据与监测点数据格式
项目和监测点数据是面向业务的数据视图。
Topic 结构
inteagle/{customerId}/p/{projectId} # 项目所有数据
inteagle/{customerId}/p/{projectId}/mp/{pointId} # 监测点数据
| 参数 | 说明 | 示例 |
|---|
{customerId} | 客户 ID | cust_abc123 |
{projectId} | 监测项目 ID | proj_abc |
{pointId} | 监测点 ID | point_001 |
订阅示例
# 某项目所有数据
inteagle/cust_abc123/p/proj_abc/#
# 某监测点所有数据
inteagle/cust_abc123/p/proj_abc/mp/point_001
# 项目下所有监测点数据
inteagle/cust_abc123/p/proj_abc/mp/+
监测点数据
Topic: inteagle/{customerId}/p/{projectId}/mp/{pointId}
遥测数据
{
"type": "telemetry",
"ts": 1735560000000,
"payload": {
"entity": {
"type": "POINT",
"id": "point_001"
},
"disp": {
"dx": 0.05,
"dy": 0.02,
"dz": 0.01
},
"tilt": 0.5
}
}
payload 字段说明
| 字段 | 类型 | 说明 |
|---|
entity | EntityRef | 实体引用(类型 + ID) |
disp, tilt, … | Object/Number | 指标数据(按需配置) |
注意:监测点名称、项目名称等元数据通过 HTTP API 获取。
常见指标
| 指标 | 说明 | 单位 |
|---|
dx | X 方向累积位移变化 | mm |
dy | Y 方向累积位移变化 | mm |
dz | Z 方向累积位移变化 | mm |
tilt | 倾斜角 | ″(角秒) |
strain | 应变 | με |
注意:监测点指标是按需配置的,不同监测点可能包含不同的指标组合。有些数据需要从 设备实体 订阅(如视觉位移计的图片)。
告警数据
告警格式参见 告警消息。
监测点告警示例:
{
"type": "3A",
"ts": 1735560000000,
"payload": {
"id": "alm_20251230_001",
"alarmType": "DISPLACEMENT_EXCEEDED",
"severity": "alert",
"status": "ACTIVE_UNACK",
"originator": {
"type": "POINT",
"id": "point_001"
},
"detail": {
"metric": "dx",
"value": 12.5,
"threshold": 10.0,
"message": "X方向位移超限"
}
}
}
设备数据
如需订阅设备原始数据(环境、图像等),请参见 设备数据格式。
3.2 - 设备数据格式
不同设备类型的数据格式
设备数据通过 Topic inteagle/{customerId}/p/{projectId}/d/{deviceId} 推送。
通用消息结构
所有 MQTT 消息采用统一的包装结构:
{
"type": "telemetry | 3A | event | image | attributes",
"ts": 1735560000000,
"payload": {
...
}
}
| 字段 | 类型 | 说明 |
|---|
type | String | 消息类型 |
ts | Long | Unix 毫秒时间戳 |
payload | Object | 具体数据内容 |
开发者可以统一解析:
const { type, ts, payload } = message;
switch(type) {
case 'telemetry': handleTelemetry(payload); break;
case '3A': handleAlarm(payload); break;
case 'event': handleEvent(payload); break;
case 'image': handleImage(payload); break;
case 'attributes': handleAttributes(payload); break;
}
消息类型
| type | 说明 | payload 内容 |
|---|
telemetry | 遥测数据 | 位移、环境、状态 |
3A | 告警 | 告警详情 |
event | 事件 | 事件类型和数据 |
image | 图像 | 图片 URL 和元数据 |
attributes | 属性变更 | 变更的属性 |
告警消息 (3A)
{
"type": "3A",
"ts": 1735560000000,
"payload": {
"id": "alm_20251230_001",
"alarmType": "LOW_BATTERY",
"severity": "alarm",
"status": "ACTIVE_UNACK",
"originator": {
"entityType": "DEVICE",
"id": "dev_001"
},
"detail": {
"metric": "pwr.battery",
"value": 3.2,
"threshold": 3.5,
"message": "电池电压低"
}
}
}
payload 字段说明
| 字段 | 类型 | 必填 | 说明 |
|---|
id | String | 是 | 告警唯一标识 |
alarmType | String | 是 | 告警类型(见数据字典) |
severity | String | 是 | 告警级别 |
status | String | 是 | 告警状态 |
originator.entityType | String | 是 | 实体类型:DEVICE、POINT |
originator.id | String | 是 | 实体 ID |
detail.metric | String | 是 | 触发告警的指标 |
detail.value | Number | 否 | 触发时的实际值 |
detail.threshold | Number | 否 | 阈值 |
detail.message | String | 是 | 告警描述 |
告警级别 (severity)
| 值 | 说明 |
|---|
ALERT | 预警 |
ALARM | 报警 |
ACTION | 紧急 |
告警状态 (status)
| 值 | 说明 |
|---|
ACTIVE_UNACK | 触发未确认 |
ACTIVE_ACK | 触发已确认 |
CLEARED_UNACK | 恢复未确认 |
CLEARED_ACK | 恢复已确认 |
事件消息 (event)
事件分为通用事件(所有设备)和设备事件(取决于设备能力)。
{
"type": "event",
"ts": 1735560000000,
"payload": {
"deviceId": "dev_001",
"eventType": "DEVICE_ONLINE",
"data": {}
}
}
payload 字段说明
| 字段 | 类型 | 说明 |
|---|
deviceId | String | 设备 ID |
eventType | String | 事件类型 |
data | Object | 事件相关数据 |
通用事件类型
| eventType | 说明 |
|---|
DEVICE_ONLINE | 设备上线 |
DEVICE_OFFLINE | 设备离线 |
设备特有事件参见各设备文档。
属性变更消息 (attributes)
{
"type": "attributes",
"ts": 1735560000000,
"payload": {
"deviceId": "dev_001",
"data": {
"firmwareVersion": "2.1.0"
}
}
}
3.2.1 - VDM 视觉位移计
VDM 视觉位移计设备数据格式
VDM(Visual Displacement Meter)视觉位移计是 Inteagle 核心监测设备,支持多标靶位移测量。
遥测数据
视觉位移计设备遥测数据包含位移、环境、状态信息:
{
"type": "telemetry",
"ts": 1735560000000,
"payload": {
"entity": {
"type": "DEVICE",
"id": "dev_001"
},
"disp": {
"1": {
"dx": 0.05,
"dy": 0.02,
"dz": 0.01,
"tilt": 0.05
},
"2": {
"dx": 0.03,
"dy": 0.01
}
},
"env": {
"temperature": 25.5,
"humidity": 60.0,
"pressure": 101.3
},
"status": {
"signal": {
"type": "4G",
"rssi": -75
},
"pwr": {
"battery": 3.7,
"inputDC": 12.1
},
"storage": {
"percent": 45
}
}
}
}
位移数据 (disp)
| 字段 | 类型 | 说明 |
|---|
disp | Object | 按标靶 ID 组织的位移数据 |
dx, dy, dz | Number | 累积位移变化 (mm) |
tilt | Number | 倾斜变化角度(″ 角秒) |
环境数据 (env)
部分 VDM 型号支持环境数据采集:
| 字段 | 类型 | 单位 | 说明 |
|---|
temperature | Number | °C | 温度 |
humidity | Number | %RH | 相对湿度 |
pressure | Number | kPa | 大气压 |
状态数据 (status)
| 字段 | 类型 | 说明 |
|---|
signal.type | String | 网络类型:4G, Ethernet |
signal.rssi | Integer | 信号强度 (dBm) |
pwr.battery | Number | 电池电压 (V) |
pwr.inputDC | Number | DC 输入电压 (V) |
storage.percent | Integer | 存储使用率 (%) |
告警
设备告警格式参见 告警消息。
视觉位移计设备告警示例
{
"type": "3A",
"ts": 1735560000000,
"payload": {
"id": "alm_20251230_001",
"alarmType": "TARGET_LOST",
"severity": "alarm",
"status": "ACTIVE_UNACK",
"originator": {
"type": "DEVICE",
"id": "dev_001"
},
"detail": {
"metric": "target_1_status",
"message": "标靶1丢失"
}
}
}
VDM 常见告警类型
| alarmType | 说明 | metric |
|---|
TARGET_LOST | 标靶丢失 | target_{n}_status |
LOW_BATTERY | 电池电压低 | pwr.battery |
LOW_VOLTAGE | DC输入电压低 | pwr.inputDC |
STORAGE_FULL | 存储空间不足 | storage.percent |
事件
事件分为通用事件(所有设备)和设备事件(取决于设备能力)。
通用事件
平台为所有设备提供在线/离线状态推送:
{
"type": "event",
"ts": 1735560000000,
"payload": {
"entity": {
"type": "DEVICE",
"id": "dev_001"
},
"eventType": "DEVICE_ONLINE",
"data": {}
}
}
| eventType | 说明 |
|---|
DEVICE_ONLINE | 设备上线 |
DEVICE_OFFLINE | 设备离线 |
视觉位移计设备事件
VDM 特有的事件类型:
{
"type": "event",
"ts": 1735560000000,
"payload": {
"entity": {
"type": "DEVICE",
"id": "dev_001"
},
"eventType": "TARGET_LOST",
"data": {
"targetId": "1"
}
}
}
| eventType | 说明 | data |
|---|
TARGET_LOST | 标靶丢失 | {"targetId": "1"} |
TARGET_RECOVERED | 标靶恢复 | {"targetId": "1"} |
CALIBRATION_COMPLETE | 标定完成 | {"targetId": "1"} |
STORAGE_FULL | 存储空间已满 | {} |
图像
VDM 支持图像采集:
{
"type": "image",
"ts": 1735560000000,
"payload": {
"entity": {
"type": "DEVICE",
"id": "dev_001"
},
"sensorId": 0,
"trigger": "snapshot",
"url": "https://storage.inteagle.com/images/...",
"ttl": 86400
}
}
| 字段 | 类型 | 说明 |
|---|
entity | EntityRef | 实体引用 |
sensorId | Integer | 视觉传感器 ID(0 或 1) |
trigger | String | 触发类型 |
url | String | 图片下载 URL |
ttl | Integer | URL 有效期(秒) |
触发类型
| trigger | 说明 |
|---|
snapshot | 手动快照 |
3A | 告警触发 |
periodic | 定时拍照 |
属性变更
{
"type": "attributes",
"ts": 1735560000000,
"payload": {
"entity": {
"type": "DEVICE",
"id": "dev_001"
},
"measureFrequency": 10,
"irLightEnabled": true
}
}
VDM 常见属性
| 属性 | 类型 | 说明 |
|---|
measureFrequency | Integer | 测量频率 (Hz) |
irLightEnabled | Boolean | 红外补光灯开关 |
targetCount | Integer | 标靶数量 |
firmwareVersion | String | 固件版本 |
5 - 故障排查
常见问题的诊断与解决
SDK 常见问题
认证失败
可能原因:
- Access Key 或 Secret Key 错误
- 凭证已过期
解决: 确认凭证正确,联系管理员重新获取。
资源不存在 (NotFoundException)
诊断:
// 使用 CLI 验证资源是否存在
shm-cli projects list
shm-cli points list --project PROJECT_ID
请求过频 (RateLimitException)
解决:
try {
client.telemetry().query(query);
} catch (RateLimitException e) {
Thread.sleep(e.getRetryAfterMs());
// 重试
}
MQTT 连接问题
连接失败
| 错误码 | 含义 | 解决 |
|---|
| 4 | 用户名密码错误 | 检查客户 ID 和凭证 |
| 5 | 未授权 | 确认账号有 MQTT 权限 |
诊断:
# 测试端口连通性
openssl s_client -connect broker.shm.inteagle.com:8883
订阅后收不到数据
检查:
- Topic 格式是否正确:
inteagle/{customerId}/p/{projectId}/# - 设备是否在线并上报数据
- 使用通配符
# 测试是否有任何消息
频繁断线
解决:
- Keep Alive 设为 60 秒
- 使用唯一 Client ID
- 实现自动重连逻辑
数据问题
时间戳转换
API 返回毫秒时间戳,转换时需除以 1000:
Instant instant = Instant.ofEpochMilli(ts);
LocalDateTime dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
查询不到历史数据
检查:
- 时间范围:
endTs > startTs - 数据点数量限制:单次最多 1000 点
- 监测点是否有数据:先查询最新数据确认
需要帮助?
请联系技术支持。