欢迎使用 Inteagle 设备 API 文档。
快速导航
平台端 API
适用于通过 Inteagle 结构健康监测平台获取设备数据的场景。开始对接 →
直连设备
适用于自建 MQTT 服务器,直接接收设备数据的场景。查看设备类型 →
本文档介绍如何对接 Inteagle 监测设备。
Inteagle 提供两种数据对接方式,客户可根据业务需求和开发能力选择不同的接入方式。
说明:
- 建议不熟悉设备的客户前期采用平台对接方式获取数据和控制设备,接入更简单便捷,成本更低。
- 对设备的使用已经比较熟悉或者有更高需求的客户请联系鹰腾工作人员开通直连设备的权限。
- 有数据保密要求的客户请联系鹰腾工作人员开通直连设备的权限。
| 方式 | 适用场景 | 协议 |
|---|---|---|
| 平台对接 | 通过 Inteagle 结构健康监测平台 | SDK + MQTT |
| 直连设备 | 自建 MQTT 服务器,直连设备 | MQTT |
适用于通过 Inteagle 结构健康监测平台获取设备数据的场景。
适用于搭建自有 MQTT 服务器,直接接收设备数据的场景。
| 类型 | 说明 | 文档 |
|---|---|---|
| 视觉位移计(VDM) | 非接触式位移监测设备 | 查看详情 → |
更多设备类型持续更新中…
本章节介绍如何将您的系统与 Inteagle 结构健康监测平台对接。
强烈推荐使用官方 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(推荐) | 项目/设备/数据查询 | HTTP |
| MQTT 订阅 | 实时数据推送 | MQTT |
| 文档 | 说明 |
|---|---|
| 核心概念 | 数据模型与业务流程 |
| 快速入门 | SDK 使用教程 |
| MQTT 订阅 | 实时数据推送 |
| 数据字典 | 字段与枚举定义 |
理解平台的核心概念有助于更高效地使用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 |
监测工程的顶层容器,对应一个实际的工程项目(如桥梁监测、边坡监测)。
属性:
包含:
典型项目场景:
场景 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业务视角的测量点,聚合了来自设备的监测指标。
特点:
监测点类型与场景:
| 监测场景 | 监测点类型 | 典型指标 | 应用示例 |
|---|---|---|---|
| 桥梁/结构监测 | 位移监测点 | 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物理传感器/采集设备,上报原始测量数据。
VDM 视觉位移计系列:
所有 视觉位移计设备均基于视觉测量原理,可测量多个标靶。不同型号在视觉传感器数量(单目/双目)、云台功能(固定式/旋转式)、连接方式(有线/无线)上有所差异。
型号分类:
详细型号规格参见 数据字典 - 设备类型
遥测数据是设备上报的时序监测数据,是平台的核心数据类型。
通过 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)
告警系统采用四态状态模型,支持完整的告警生命周期管理。
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 告警级别体系:
| 级别 | 颜色 | 说明 | 典型响应 |
|---|---|---|---|
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 推送清除
endInteagle 提供 SDK,集成了 HTTP 和 MQTT 两种通道,配合使用获取完整的数据能力。
| 通道 | 协议 | 用途 | SDK 方法 |
|---|---|---|---|
| 查询通道 | HTTP | 查询项目、监测点、设备、历史数据 | client.projects(), client.telemetry() |
| 订阅通道 | MQTT | 接收实时遥测、告警推送 | client.subscribe() |
根据您的需求选择阅读路径:
| 目标 | 推荐阅读 |
|---|---|
| 快速体验对接 | 快速入门 - SDK 使用教程 |
| 实时监控 | MQTT 订阅 - 实时数据订阅指南 |
| 了解字段含义 | 数据字典 - 完整的字段定义 |
本指南帮助您快速使用 SDK 对接 Inteagle 结构健康监测平台。
<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 即将推出,敬请期待。
import com.inteagle.shm.InteagleClient;
InteagleClient client = InteagleClient.builder()
.apiEndpoint("https://api.shm.inteagle.com")
.credentials("your-access-key", "your-secret-key")
.build();
// 查询项目列表
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");
// 查询项目下的监测点
List<MonitoringPoint> points = client.points().listByProject("project-id");
for (MonitoringPoint point : points) {
System.out.println("监测点: " + point.getName());
}
// 查询监测点详情
MonitoringPoint point = client.points().get("point-id");
// 查询项目下的设备
List<Device> devices = client.devices().listByProject("project-id");
// 查询设备详情
Device device = client.devices().get("device-id");
System.out.println("设备状态: " + (device.isOnline() ? "在线" : "离线"));
// 查询监测点最新数据
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();
// 查询活动告警
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());
}
// 查询项目的告警规则
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
Inteagle 结构健康监测平台提供 MQTT 实时数据推送服务。
| 参数 | 值 |
|---|---|
| 服务器 | broker.shm.inteagle.com |
| 端口 | 8883 (TLS) |
| 协议 | MQTT 3.1.1 / 5.0 |
| 参数 | 值 |
|---|---|
| 用户名 | 客户 ID |
| 密码 | Access Token |
| Client ID | 自定义(建议:{customerId}_{appName}) |
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 | 说明 |
|---|---|---|
| 遥测 | 0 | 允许少量丢失 |
| 告警 | 1 | 确保送达 |
项目和监测点数据是面向业务的数据视图。
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方向位移超限"
}
}
}
如需订阅设备原始数据(环境、图像等),请参见 设备数据格式。
设备数据通过 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 | 属性变更 | 变更的属性 |
{
"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 | 恢复已确认 |
事件分为通用事件(所有设备)和设备事件(取决于设备能力)。
{
"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 | 设备离线 |
设备特有事件参见各设备文档。
{
"type": "attributes",
"ts": 1735560000000,
"payload": {
"deviceId": "dev_001",
"data": {
"firmwareVersion": "2.1.0"
}
}
}
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 | Object | 按标靶 ID 组织的位移数据 |
dx, dy, dz | Number | 累积位移变化 (mm) |
tilt | Number | 倾斜变化角度(″ 角秒) |
部分 VDM 型号支持环境数据采集:
| 字段 | 类型 | 单位 | 说明 |
|---|---|---|---|
temperature | Number | °C | 温度 |
humidity | Number | %RH | 相对湿度 |
pressure | Number | kPa | 大气压 |
| 字段 | 类型 | 说明 |
|---|---|---|
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 | 固件版本 |
| 指标 | 名称 | 单位 | 说明 |
|---|---|---|---|
dx | X方向位移 | mm | 水平位移 |
dy | Y方向位移 | mm | 水平位移 |
dz | Z方向位移 | mm | 竖向位移 |
settlement | 沉降量 | mm | 竖向沉降(负值) |
| 指标 | 名称 | 单位 |
|---|---|---|
tilt | 倾斜角 | ″ (角秒) |
| 指标 | 名称 | 单位 |
|---|---|---|
temperature | 温度 | °C |
humidity | 湿度 | % |
| 类型 | 说明 |
|---|---|
PROJECT | 项目 |
POINT | 监测点 |
DEVICE | 设备 |
| 级别 | 说明 | 颜色 |
|---|---|---|
ALERT | 预警 | 黄色 |
ALARM | 报警 | 橙色 |
ACTION | 紧急 | 红色 |
| 状态 | 活跃 | 已确认 |
|---|---|---|
ACTIVE_UNACK | ✅ | ❌ |
ACTIVE_ACK | ✅ | ✅ |
CLEARED_UNACK | ❌ | ❌ |
CLEARED_ACK | ❌ | ✅ |
| 类型 | 说明 |
|---|---|
DISPLACEMENT_EXCEEDED | 位移超限 |
TILT_EXCEEDED | 倾斜超限 |
SETTLEMENT_EXCEEDED | 沉降超限 |
| 类型 | 说明 |
|---|---|
DEVICE_OFFLINE | 设备离线 |
LOW_BATTERY | 电池电量低 |
TARGET_LOST | 标靶丢失 |
| 运算符 | 说明 |
|---|---|
GT | 大于 (>) |
GTE | 大于等于 (≥) |
LT | 小于 (<) |
LTE | 小于等于 (≤) |
EQ | 等于 (=) |
| 场景 | 格式 | 示例 |
|---|---|---|
| 时间戳 | Unix 毫秒 | 1735560000000 |
| 日期 | ISO 8601 | 2025-01-08T10:30:00Z |
可能原因:
解决: 确认凭证正确,联系管理员重新获取。
诊断:
// 使用 CLI 验证资源是否存在
shm-cli projects list
shm-cli points list --project PROJECT_ID
解决:
try {
client.telemetry().query(query);
} catch (RateLimitException e) {
Thread.sleep(e.getRetryAfterMs());
// 重试
}
| 错误码 | 含义 | 解决 |
|---|---|---|
| 4 | 用户名密码错误 | 检查客户 ID 和凭证 |
| 5 | 未授权 | 确认账号有 MQTT 权限 |
诊断:
# 测试端口连通性
openssl s_client -connect broker.shm.inteagle.com:8883
检查:
inteagle/{customerId}/p/{projectId}/## 测试是否有任何消息解决:
API 返回毫秒时间戳,转换时需除以 1000:
Instant instant = Instant.ofEpochMilli(ts);
LocalDateTime dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
检查:
endTs > startTs请联系技术支持。
本章节介绍 Inteagle 支持的设备类型及其技术参数。
| 类型 | 说明 | 文档 |
|---|---|---|
| 视觉位移计(VDM) | 非接触式位移监测设备 | 查看详情 → |
更多设备类型持续更新中…
视觉位移计是 Inteagle 研发的非接触式位移监测设备,可以实时监测目标结构物的位移变化。
说明:有两种方式:MQTT和modbus. modbus接入方式正在开发中。
| 文档 | 说明 |
|---|---|
| 快速入门 | 5 分钟接入 VDM 设备数据 |
| API参考 | API 列表、错误码、数据格式 |
| 型号 | 视觉传感器 | 云台类型 | 说明 |
|---|---|---|---|
| V1 | 单目 | 无 | 固定式,基础款 |
| V2W | 双目 | 无 | 固定式,视野加倍 |
| V2K | 双目 | 无 | 固定式,安装时可自由选择视野角度 |
| O1 | 单目 | 单轴 | 旋转式,仅水平方向可旋转 |
| X1 | 单目 | 双轴 | 旋转式,水平和竖向方向均可旋转 |
| X2W | 双目 | 双轴 | 旋转式,水平和竖向方向均可旋转,视野加倍 |
说明:
- 旋转式型号具有巡航监测功能
- 双目型号有
sensorId参数
本指南帮助您快速接入 VDM 位移数据,适用于系统集成开发者。
flowchart LR
A[1. App 配置<br>MQTT 连接] --> B[2. 订阅<br>设备主题]
B --> C[3. 设备上线<br>上报属性]
C --> D[4. 接收<br>位移数据]
D --> E[5. 接收告警<br>可选]通过 App 配置设备连接到您的 MQTT 服务器:
配置完成后,从设备标签或 App 获取:
XXXXXXXXXXXXvdm/{deviceId}/rpc/resp # RPC 响应
vdm/{deviceId}/telemetry # 遥测数据:累积位移变化、温湿度等环境数据、电压等设备状态数据
vdm/{deviceId}/attributes # 属性上报
vdm/{deviceId}/event # 事件通知
vdm/{deviceId}/3A # 预警、告警和行动等3A(Alert, Alarm和Action)通知
vdm/{deviceId}/image # 图片
示例(设备 ID 为 XXXXXXXXXXXX):
vdm/XXXXXXXXXXXX/telemetry
vdm/XXXXXXXXXXXX/3A
设备连接 MQTT 后,自动上报只读属性到 attributes 主题:
{
"deviceId": "XXXXXXXXXXXX",
"deviceModel": "V1",
"fwVer": "1.2.3",
"measureStatus": "Idle"
}
收到属性上报表示设备已上线,可据此判断设备连接状态。
设备测量运行时,自动推送位移数据:
{
"disp": {
"t": 1734567890,
"d": {
"1": {
"type": "local",
"dx": [0.01, 0.02, 0.03],
"dy": [0.00, 0.01, 0.01]
}
}
}
}
| 字段 | 说明 |
|---|---|
t | Unix 时间戳(秒) |
1 | 标靶 ID |
dx | X 方向累积位移变化(mm) |
dy | Y 方向累积位移变化(mm) |
import paho.mqtt.client as mqtt
import json
DEVICE_ID = "XXXXXXXXXXXX"
BROKER = "mqtt.example.com"
def on_message(client, userdata, msg):
data = json.loads(msg.payload)
if "disp" in data:
t = data["disp"]["t"]
# 遍历所有标靶(动态数量,只包含有数据的标靶)
for target_id, values in data["disp"]["d"].items():
dx = values.get("dx", [])
dy = values.get("dy", [])
print(f"[{t}] 标靶{target_id}: dx={dx}, dy={dy}")
client = mqtt.Client()
client.on_message = on_message
client.connect(BROKER, 1883)
client.subscribe(f"vdm/{DEVICE_ID}/telemetry")
client.loop_forever()const mqtt = require('mqtt');
const DEVICE_ID = 'XXXXXXXXXXXX';
const client = mqtt.connect('mqtt://mqtt.example.com');
client.on('connect', () => {
client.subscribe(`vdm/${DEVICE_ID}/telemetry`);
});
client.on('message', (topic, message) => {
const data = JSON.parse(message.toString());
if (data.disp) {
const { t, d } = data.disp;
// 遍历所有标靶(动态数量,只包含有数据的标靶)
for (const [targetId, values] of Object.entries(d)) {
console.log(`[${t}] 标靶${targetId}:`, values);
}
}
});设备监测的标靶如果有累积位移变化超出了预先设置的3A(Alert, Alarm和Action)阈值,设备会自动报警。
| 类型 | 说明 |
|---|---|
DISPLACEMENT_EXCEEDED | 累积位移变化超限告警 |
TARGET_LOST | 标靶丢失告警 |
DEVICE_OFFLINE | 设备离线告警 |
LOW_BATTERY | 低电量告警 |
STORAGE_NEAR_FULL | 存储即将满 |
Q: 没有收到数据?
Q: 数据频率是多少?
sampleFreq)Q: 如何启动/停止测量?
详细 API 请参考各型号手册:
本章节介绍 VDM 设备的完整API参考,包括通信协议、API 列表、错误码等技术细节。
| 参数 | 值 |
|---|---|
| 协议 | MQTT v3.1.1 |
| Payload | JSON |
| 主题 | 方向 | 说明 |
|---|---|---|
vdm/{deviceId}/rpc/req | 下行 | RPC 指令 |
vdm/{deviceId}/rpc/resp | 上行 | RPC 响应 |
vdm/{deviceId}/telemetry | 上行 | 遥测数据 |
vdm/{deviceId}/attributes | 上行 | 属性上报 |
vdm/{deviceId}/event | 上行 | 事件上报 |
vdm/{deviceId}/3A | 上行 | 告警上报 |
vdm/{deviceId}/image | 上行 | 图片数据 |
| API | V1 | V2W | V2K | O1 | X1 | X2W |
|---|---|---|---|---|---|---|
| 基础 API | ||||||
| getAttr | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| setAttr | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| reboot | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| syncTime | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 标靶管理 | ||||||
| initRefTargets | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| addTargets | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| getTargets | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| setTargets | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| deleteTargets | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 测量控制 | ||||||
| startMeasurement | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| stopMeasurement | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| setLightLevel | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| getLightLevel | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| snapshot | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 存储 | ||||||
| getStorageInfo | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| queryTelemetry | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| uploadS3 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 电机控制 | ||||||
| setMotorAngle | - | - | - | ✓ | ✓ | ✓ |
| getMotorAngle | - | - | - | ✓ | ✓ | ✓ |
| setMotorZero | - | - | - | ✓ | ✓ | ✓ |
| enableMotor | - | - | - | ✓ | ✓ | ✓ |
| disableMotor | - | - | - | ✓ | ✓ | ✓ |
| 巡航控制 | ||||||
| getCruisePaths | - | - | - | ✓ | ✓ | ✓ |
| setCruisePoint | - | - | - | ✓ | ✓ | ✓ |
| removeCruisePoint | - | - | - | ✓ | ✓ | ✓ |
| startPatrol | - | - | - | ✓ | ✓ | ✓ |
| stopPatrol | - | - | - | ✓ | ✓ | ✓ |
| getPatrolStatus | - | - | - | ✓ | ✓ | ✓ |
| 码 | 说明 | 适用型号 |
|---|---|---|
| 0 | 成功 | 全部 |
| 1 | 参数无效 | 全部 |
| 2 | 缺少必填参数 | 全部 |
| 100 | 标靶不存在 | 全部 |
| 102 | 标靶初始化失败 | 全部 |
| 104 | 标靶丢失 | 全部 |
| 200 | 测量未启动 | 全部 |
| 201 | 测量已在运行 | 全部 |
| 300 | 电机不可用 | O1, X1, X2W |
| 302 | 电机运动中 | O1, X1, X2W |
| 303 | 电机到达限位 | X1, X2W |
| 310 | 垂直电机不可用 | O1 |
| 400 | 巡航功能不可用 | O1, X1, X2W |
| 403 | 巡航已在运行 | O1, X1, X2W |
设备通过 image 主题上报图片。
主题: vdm/{deviceId}/image
Payload 结构:
[Header (8+ 字节)] + [JPEG 二进制数据]
| 偏移 | 长度 | 字段 | 说明 |
|---|---|---|---|
| 0 | 1 | version | 协议版本,当前 0x01 |
| 1 | 1 | headerLen | Header 总长度(字节) |
| 2 | 1 | sensorId | 视觉传感器 ID(单目为 0,双目为 0 或 1) |
| 3 | 1 | type | 图片类型(见下表) |
| 4 | 4 | timestamp | Unix 时间戳(uint32, 大端) |
| 8+ | - | imageData | JPEG 二进制数据 |
图片类型 (type):
| 值 | 类型 | 说明 |
|---|---|---|
| 0 | snapshot | RPC 触发的快照 |
| 1 | 3A | 告警触发的抓图 |
| 2 | periodic | 定时抓图 |
01 08 00 01 67 72 B3 D6 FF D8 FF E0 ...
│ │ │ │ └──────────┴─ timestamp: 1735533526
│ │ │ └─ type: 1 (3A)
│ │ └─ sensorId: 0
│ └─ headerLen: 8
└─ version: 1
| 项目 | 规格 |
|---|---|
| 格式 | JPEG |
| 最大分辨率 | 1280×720 (720p) |
| 典型大小 | 50KB - 200KB |
未来版本可在 timestamp 后追加字段,并相应增加 headerLen。解析时根据 headerLen 跳过不识别的字段,保证向后兼容。
型号: V1 | 版本: 1.0 | 更新: 2026-01-08
V1 是单目固定式视觉位移计。
| 方法 | 说明 |
|---|---|
getAttr | 获取属性 |
setAttr | 设置属性 |
reboot | 重启设备 |
syncTime | 同步时间 |
| 方法 | 说明 |
|---|---|
initRefTargets | 初始化标靶 |
addTargets | 添加标靶 |
getTargets | 获取标靶列表 |
setTargets | 更新标靶配置 |
deleteTargets | 删除标靶 |
| 方法 | 说明 |
|---|---|
startMeasurement | 启动测量 |
stopMeasurement | 停止测量 |
setLightLevel | 设置补光灯发光挡位 |
getLightLevel | 获取补光灯发光挡位 |
snapshot | 获取快照 |
| 方法 | 说明 |
|---|---|
getStorageInfo | 获取存储信息 |
queryTelemetry | 查询历史数据 |
uploadS3 | 上传数据到 S3 |
获取设备属性。不带 keys 参数时返回全部属性。
请求:
{"reqId": 1, "method": "getAttr", "params": {}}
或指定属性:
{"reqId": 1, "method": "getAttr", "params": {"keys": ["status", "sampleFreq"]}}
响应:
{
"reqId": 1,
"code": 0,
"data": {
"deviceId": "XXXXXXXXXXXX",
"deviceModel": "V1",
"fwVer": "1.2.3",
"resolution": "3840x2160",
"measureStatus": "Idle",
"sampleFreq": 10,
"exposure": "Middle",
"brightnessThr": 225,
"reportMetrics": ["dx", "dy"]
}
}
属性列表:
| 属性 | 类型 | 读写 | 说明 |
|---|---|---|---|
deviceId | String | R | 设备 ID |
deviceModel | String | R | 型号 |
fwVer | String | R | 固件版本 |
measureStatus | String | R | 测量状态 |
sampleFreq | Float | RW | 采样频率 (Hz) |
exposure | String | RW | 曝光档位:High/Middle/Low |
brightnessThr | Integer | RW | 发光强度阈值 (0-255) |
reportMetrics | Array | RW | 上报指标 |
设置设备属性。
请求:
{"reqId": 1, "method": "setAttr", "params": {
"sampleFreq": 5,
"reportMetrics": ["dx", "dy"]
}}
响应:
{"reqId": 1, "code": 0}
初始化参考标靶。会清除已有标靶。
参数:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
targets | Array | 是 | 标靶配置 |
targets[].targetId | String | 否 | 标靶 ID(不填则自动生成) |
targets[].roi | Object | 是 | ROI 区域 |
targets[].distance | Float | 是 | 测量距离 (m) |
请求:
{"reqId": 1, "method": "initRefTargets", "params": {
"targets": [{
"targetId": "1",
"roi": {"x": 1000, "y": 500, "width": 400, "height": 400},
"distance": 5.0
}]
}}
响应:
{"reqId": 1, "code": 0, "data": {"targetIds": ["1"]}}
在已有标靶基础上添加新标靶。
请求:
{"reqId": 1, "method": "addTargets", "params": {
"targets": [
{"targetId": "2", "roi": {"x": 800, "y": 400, "width": 400, "height": 400}, "distance": 6.0}
]
}}
响应:
{"reqId": 1, "code": 0, "data": {"addedIds": ["2"]}}
获取当前标靶列表。
请求:
{"reqId": 1, "method": "getTargets", "params": {}}
响应:
{"reqId": 1, "code": 0, "data": {
"targets": [
{"targetId": "1", "roi": {"x": 1000, "y": 500, "width": 400, "height": 400}, "distance": 5.0, "status": "tracking"},
{"targetId": "2", "roi": {"x": 800, "y": 400, "width": 400, "height": 400}, "distance": 6.0, "status": "tracking"}
]
}}
标靶状态:
| 状态 | 说明 |
|---|---|
tracking | 正常跟踪 |
lost | 标靶丢失 |
idle | 未启动测量 |
更新已有标靶的配置。
请求:
{"reqId": 1, "method": "setTargets", "params": {
"targets": [
{"targetId": "1", "distance": 5.5}
]
}}
响应:
{"reqId": 1, "code": 0}
删除指定标靶。
请求:
{"reqId": 1, "method": "deleteTargets", "params": {
"targetIds": ["2"]
}}
响应:
{"reqId": 1, "code": 0}
启动测量。
请求:
{"reqId": 1, "method": "startMeasurement", "params": {}}
响应:
{"reqId": 1, "code": 0}
停止测量。
请求:
{"reqId": 1, "method": "stopMeasurement", "params": {}}
响应:
{"reqId": 1, "code": 0}
设置补光灯发光挡位。
请求:
{"reqId": 1, "method": "setLightLevel", "params": {"level": 1}}
响应:
{"reqId": 1, "code": 0}
获取补光灯发光挡位。
请求:
{"reqId": 1, "method": "getLightLevel", "params": {}}
响应:
{"reqId": 1, "code": 0, "data": {"level": 1}}
测量运行时,设备按采样频率上报位移数据。
主题: vdm/{deviceId}/telemetry
{"disp":{"t":1734567890,"d":{"1":{"type": "local","dx":[0.01,0.02,0.03],"dy":[0.00,0.01,0.01]}}}}
| 字段 | 单位 | 说明 |
|---|---|---|
t | 秒 | Unix 时间戳 |
d | - | 标靶数据字典 |
type | - | 数据的坐标系是全局还是局部。 |
dx | mm | X 方向位移变化 |
dy | mm | Y 方向位移变化 |
位移超限时通过 3A 主题上报。
主题: vdm/{deviceId}/3A
{
"3A": "DISPLACEMENT_EXCEEDED",
"level": 2,
"targetId": "1",
"value": 12.5,
"threshold": 10.0,
"ts": 1734567890
}
告警级别:
| 级别 | 名称 | 说明 |
|---|---|---|
| 0 | - | 恢复 |
| 1 | alert | 预警 |
| 2 | alarm | 报警 |
| 3 | action | 行动 |
设备状态变化时通过 event 主题上报。
主题: vdm/{deviceId}/event
{
"event": "measurementStarted",
"ts": 1734567890,
"data": {}
}
事件类型:
| 事件 | 说明 | data 内容 |
|---|---|---|
measurementStarted | 测量开始 | {} |
measurementStopped | 测量停止 | {} |
TARGET_LOST | 标靶丢失 | {"targetId": "1"} |
targetRecovered | 标靶恢复 | {"targetId": "1"} |
| 码 | 说明 |
|---|---|
| 0 | 成功 |
| 1 | 参数无效 |
| 2 | 缺少必填参数 |
| 100 | 标靶不存在 |
| 102 | 标靶初始化失败 |
| 104 | 标靶丢失 |
| 200 | 测量未启动 |
| 201 | 测量已在运行 |
订阅: vdm/{deviceId}/rpc/resp
订阅: vdm/{deviceId}/telemetry
订阅: vdm/{deviceId}/attributes
订阅: vdm/{deviceId}/event
订阅: vdm/{deviceId}/3A
订阅: vdm/{deviceId}/image
发布到 vdm/{deviceId}/rpc/req:
{"reqId": 1, "method": "initRefTargets", "params": {
"targets": [{"targetId": "1", "roi": {"x": 1000, "y": 500, "width": 400, "height": 400}, "distance": 5.0}]
}}
{"reqId": 2, "method": "startMeasurement", "params": {}}
从 vdm/{deviceId}/telemetry 接收:
{"disp": {"t": 1734567890, "d": {"1": {"type": "local", "dx": [0.01, 0.02], "dy": [0.00, 0.01]}}}}
型号: V2W / V2W4M | 版本: 1.0 | 更新: 2026-01-08
V2W 系列是双目固定式视觉位移计,支持双视觉传感器同步测量。配合另一台设备可实现 3D 空间位移融合计算。
| 方法 | 说明 |
|---|---|
getAttr | 获取属性 |
setAttr | 设置属性 |
reboot | 重启设备 |
syncTime | 同步时间 |
| 方法 | 说明 |
|---|---|
initRefTargets | 初始化标靶 |
addTargets | 添加标靶 |
getTargets | 获取标靶列表 |
setTargets | 更新标靶配置 |
deleteTargets | 删除标靶 |
| 方法 | 说明 |
|---|---|
startMeasurement | 启动测量 |
stopMeasurement | 停止测量 |
setLightLevel | 设置补光灯发光挡位 |
getLightLevel | 获取补光灯发光挡位 |
snapshot | 获取快照 |
| 方法 | 说明 |
|---|---|
getStorageInfo | 获取存储信息 |
queryTelemetry | 查询历史数据 |
uploadS3 | 上传数据到 S3 |
双目设备需要指定 sensorId 参数。
参数:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
targets | Array | 是 | 标靶配置 |
targets[].targetId | String | 否 | 标靶 ID |
targets[].sensorId | Integer | 是 | 视觉传感器 ID (0 或 1) |
targets[].roi | Object | 是 | ROI 区域 |
targets[].distance | Float | 是 | 测量距离 (m) |
请求(V2W):
{"reqId": 1, "method": "initRefTargets", "params": {
"targets": [
{"targetId": "1", "sensorId": 0, "roi": {"x": 1000, "y": 500, "width": 400, "height": 400}, "distance": 5.0},
{"targetId": "2", "sensorId": 1, "roi": {"x": 1200, "y": 600, "width": 400, "height": 400}, "distance": 5.0}
]
}}
请求(V2W4M):
{"reqId": 1, "method": "initRefTargets", "params": {
"targets": [
{"targetId": "1", "sensorId": 0, "roi": {"x": 500, "y": 300, "width": 200, "height": 200}, "distance": 5.0},
{"targetId": "2", "sensorId": 1, "roi": {"x": 600, "y": 350, "width": 200, "height": 200}, "distance": 5.0}
]
}}
注意: V2W4M 分辨率为 2560×1440,ROI 坐标需相应调整。
在已有标靶基础上添加新标靶。
请求:
{"reqId": 1, "method": "addTargets", "params": {
"targets": [
{"targetId": "3", "sensorId": 0, "roi": {"x": 800, "y": 400, "width": 400, "height": 400}, "distance": 6.0}
]
}}
响应:
{"reqId": 1, "code": 0, "data": {"addedIds": ["3"]}}
获取当前标靶列表。
请求:
{"reqId": 1, "method": "getTargets", "params": {}}
响应:
{"reqId": 1, "code": 0, "data": {
"targets": [
{"targetId": "1", "sensorId": 0, "roi": {"x": 1000, "y": 500, "width": 400, "height": 400}, "distance": 5.0, "status": "tracking"},
{"targetId": "2", "sensorId": 1, "roi": {"x": 1200, "y": 600, "width": 400, "height": 400}, "distance": 5.0, "status": "tracking"}
]
}}
更新已有标靶的配置。
请求:
{"reqId": 1, "method": "setTargets", "params": {
"targets": [
{"targetId": "1", "distance": 5.5}
]
}}
删除指定标靶。
请求:
{"reqId": 1, "method": "deleteTargets", "params": {
"targetIds": ["2"]
}}
设置补光灯发光挡位。V2W 为双目设备,有两个补光灯。
请求(批量设置不同发光强度):
{"reqId": 1, "method": "setLightLevel", "params": {
"lights": [
{"id": 0, "brightness": 5000},
{"id": 1, "brightness": 8000}
]
}}
请求(全部相同发光强度):
{"reqId": 1, "method": "setLightLevel", "params": {"brightness": 5000}}
支持配置 3D 融合上报指标。
请求:
{"reqId": 1, "method": "setAttr", "params": {
"reportMetrics": ["dx", "dy", "dz","tilt"]
}}
测量运行时,设备按采样频率上报位移数据。
主题: vdm/{deviceId}/telemetry
{"disp":{"t":1734567890,"d":{"1":{"dx":[0.01,0.02],"dy":[0.00,0.01],"dz":[0.01,0.02],"tilt":[0.00,0.01]}}}}
| 字段 | 单位 | 说明 |
|---|---|---|
t | 秒 | Unix 时间戳 |
dx | mm | X 方向累积位移变化 |
dy | mm | Y 方向累积位移变化 |
dz | mm | Z 方向累积位移变化 |
tilt | 倾斜角 | ″(角秒) |
位移超限时通过 3A 主题上报。
主题: vdm/{deviceId}/3A
{
"3A": "DISPLACEMENT_EXCEEDED",
"level": 2,
"targetId": "1",
"value": 12.5,
"threshold": 10.0,
"ts": 1734567890
}
告警级别:
| 级别 | 名称 | 说明 |
|---|---|---|
| 0 | - | 恢复 |
| 1 | alert | 预警 |
| 2 | alarm | 告警 |
| 3 | action | 行动 |
设备状态变化时通过 event 主题上报。
主题: vdm/{deviceId}/event
{
"event": "measurementStarted",
"ts": 1734567890,
"data": {}
}
事件类型:
| 事件 | 说明 | data 内容 |
|---|---|---|
measurementStarted | 测量开始 | {} |
measurementStopped | 测量停止 | {} |
TARGET_LOST | 标靶丢失 | {"targetId": "1"} |
targetRecovered | 标靶恢复 | {"targetId": "1"} |
| 码 | 说明 |
|---|---|
| 0 | 成功 |
| 1 | 参数无效 |
| 2 | 缺少必填参数 |
| 100 | 标靶不存在 |
| 102 | 标靶初始化失败 |
| 104 | 标靶丢失 |
| 200 | 测量未启动 |
| 201 | 测量已在运行 |
{"reqId": 1, "method": "initRefTargets", "params": {
"targets": [
{"targetId": "1", "sensorId": 0, "roi": {"x": 1000, "y": 500, "width": 400, "height": 400}, "distance": 5.0},
{"targetId": "2", "sensorId": 1, "roi": {"x": 1000, "y": 500, "width": 400, "height": 400}, "distance": 5.0}
]
}}
{"reqId": 2, "method": "setAttr", "params": {"reportMetrics": ["dx", "dy", "sx", "sy", "sz"]}}
{"reqId": 3, "method": "startMeasurement", "params": {}}
型号: V2K | 版本: 1.0 | 更新: 2026-01-08
V2K 是双目固定式视觉位移计,双视觉传感器可独立调整角度,适用于需要灵活监测角度的场景。
与 V2W 的区别: V2K 双视觉传感器可朝向不同方向,因此各标靶距离可能不同。
| 方法 | 说明 |
|---|---|
getAttr | 获取属性 |
setAttr | 设置属性 |
reboot | 重启设备 |
syncTime | 同步时间 |
| 方法 | 说明 |
|---|---|
initRefTargets | 初始化标靶 |
addTargets | 添加标靶 |
getTargets | 获取标靶列表 |
setTargets | 更新标靶配置 |
deleteTargets | 删除标靶 |
| 方法 | 说明 |
|---|---|
startMeasurement | 启动测量 |
stopMeasurement | 停止测量 |
setLightLevel | 设置补光灯发光挡位 |
getLightLevel | 获取补光灯发光挡位 |
snapshot | 获取快照 |
| 方法 | 说明 |
|---|---|
getStorageInfo | 获取存储信息 |
queryTelemetry | 查询历史数据 |
uploadS3 | 上传数据到 S3 |
双视觉传感器可独立配置不同距离。
参数:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
targets | Array | 是 | 标靶配置 |
targets[].targetId | String | 否 | 标靶 ID |
targets[].sensorId | Integer | 是 | 视觉传感器 ID (0 或 1) |
targets[].roi | Object | 是 | ROI 区域 |
targets[].distance | Float | 是 | 测量距离 (m) |
请求(不同距离):
{"reqId": 1, "method": "initRefTargets", "params": {
"targets": [
{"targetId": "1", "sensorId": 0, "roi": {"x": 1000, "y": 500, "width": 400, "height": 400}, "distance": 5.0},
{"targetId": "2", "sensorId": 1, "roi": {"x": 800, "y": 600, "width": 400, "height": 400}, "distance": 8.0}
]
}}
V2K 双视觉传感器可朝向不同方向,因此各标靶距离可能不同。
在已有标靶基础上添加新标靶。
请求:
{"reqId": 1, "method": "addTargets", "params": {
"targets": [
{"targetId": "3", "sensorId": 0, "roi": {"x": 600, "y": 400, "width": 400, "height": 400}, "distance": 5.5}
]
}}
响应:
{"reqId": 1, "code": 0, "data": {"addedIds": ["3"]}}
获取当前标靶列表。
请求:
{"reqId": 1, "method": "getTargets", "params": {}}
响应:
{"reqId": 1, "code": 0, "data": {
"targets": [
{"targetId": "1", "sensorId": 0, "roi": {"x": 1000, "y": 500, "width": 400, "height": 400}, "distance": 5.0, "status": "tracking"},
{"targetId": "2", "sensorId": 1, "roi": {"x": 800, "y": 600, "width": 400, "height": 400}, "distance": 8.0, "status": "tracking"}
]
}}
更新已有标靶的配置。
请求:
{"reqId": 1, "method": "setTargets", "params": {
"targets": [
{"targetId": "1", "distance": 5.5}
]
}}
删除指定标靶。
请求:
{"reqId": 1, "method": "deleteTargets", "params": {
"targetIds": ["2"]
}}
支持配置 3D 融合上报指标。
请求:
{"reqId": 1, "method": "setAttr", "params": {
"reportMetrics": ["dx", "dy", "sx", "sy", "sz"]
}}
| 指标 | 说明 |
|---|---|
dx, dy | 2D 位移 |
sx, sy, sz | 3D 空间位移(双设备融合) |
测量运行时,设备按采样频率上报累积位移变化数据。
主题: vdm/{deviceId}/telemetry
{"disp":{"t":1734567890,"d":{"1":{"dx":[0.01,0.02],"dy":[0.00,0.01],"sx":[0.01,0.02],"sy":[0.00,0.01],"sz":[0.00,0.00]}}}}
| 字段 | 单位 | 说明 |
|---|---|---|
t | 秒 | Unix 时间戳 |
dx, dy | mm | 2D 位移 |
sx, sy, sz | mm | 3D 空间位移(双设备融合) |
位移超限时通过 3A 主题上报。
主题: vdm/{deviceId}/3A
{
"3A": "DISPLACEMENT_EXCEEDED",
"level": 2,
"targetId": "1",
"value": 12.5,
"threshold": 10.0,
"ts": 1734567890
}
告警级别:
| 级别 | 名称 | 说明 |
|---|---|---|
| 0 | - | 恢复 |
| 1 | alert | 预警 |
| 2 | alarm | 告警 |
| 3 | action | 紧急 |
设备状态变化时通过 event 主题上报。
主题: vdm/{deviceId}/event
{
"event": "measurementStarted",
"ts": 1734567890,
"data": {}
}
事件类型:
| 事件 | 说明 | data 内容 |
|---|---|---|
measurementStarted | 测量开始 | {} |
measurementStopped | 测量停止 | {} |
TARGET_LOST | 标靶丢失 | {"targetId": "1"} |
targetRecovered | 标靶恢复 | {"targetId": "1"} |
| 码 | 说明 |
|---|---|
| 0 | 成功 |
| 1 | 参数无效 |
| 2 | 缺少必填参数 |
| 100 | 标靶不存在 |
| 102 | 标靶初始化失败 |
| 104 | 标靶丢失 |
| 200 | 测量未启动 |
| 201 | 测量已在运行 |
{"reqId": 1, "method": "initRefTargets", "params": {
"targets": [
{"targetId": "1", "sensorId": 0, "roi": {"x": 1000, "y": 500, "width": 400, "height": 400}, "distance": 5.0},
{"targetId": "2", "sensorId": 1, "roi": {"x": 800, "y": 600, "width": 400, "height": 400}, "distance": 8.0}
]
}}
{"reqId": 2, "method": "setAttr", "params": {"reportMetrics": ["dx", "dy", "sx", "sy", "sz"]}}
{"reqId": 3, "method": "startMeasurement", "params": {}}
型号: O1 | 版本: 1.0 | 更新: 2026-01-08
O1 是单目单轴旋转式视觉位移计,支持水平方向云台控制和巡航。
| 方法 | 说明 |
|---|---|
getAttr | 获取属性 |
setAttr | 设置属性 |
reboot | 重启设备 |
syncTime | 同步时间 |
| 方法 | 说明 |
|---|---|
initRefTargets | 初始化标靶 |
addTargets | 添加标靶 |
getTargets | 获取标靶列表 |
setTargets | 更新标靶配置 |
deleteTargets | 删除标靶 |
| 方法 | 说明 |
|---|---|
startMeasurement | 启动测量 |
stopMeasurement | 停止测量 |
setLightLevel | 设置补光灯发光挡位 |
getLightLevel | 获取补光灯发光挡位 |
snapshot | 获取快照 |
| 方法 | 说明 |
|---|---|
getStorageInfo | 获取存储信息 |
queryTelemetry | 查询历史数据 |
uploadS3 | 上传数据到 S3 |
| 方法 | 说明 |
|---|---|
setMotorAngle | 设置电机角度(仅 pan) |
getMotorAngle | 获取电机角度 |
setMotorZero | 设置电机零点 |
enableMotor | 启用电机 |
disableMotor | 禁用电机 |
| 方法 | 说明 |
|---|---|
getCruisePaths | 获取巡航路径 |
setCruisePoint | 设置巡航点 |
removeCruisePoint | 移除巡航点 |
startPatrol | 启动巡航 |
stopPatrol | 停止巡航 |
getPatrolStatus | 获取巡航状态 |
初始化参考标靶。
请求:
{"reqId": 1, "method": "initRefTargets", "params": {
"targets": [{"targetId": "1", "roi": {"x": 1000, "y": 500, "width": 400, "height": 400}, "distance": 5.0}]
}}
在已有标靶基础上添加新标靶。
请求:
{"reqId": 1, "method": "addTargets", "params": {
"targets": [
{"targetId": "2", "roi": {"x": 800, "y": 400, "width": 400, "height": 400}, "distance": 6.0}
]
}}
响应:
{"reqId": 1, "code": 0, "data": {"addedIds": ["2"]}}
获取当前标靶列表。
请求:
{"reqId": 1, "method": "getTargets", "params": {}}
响应:
{"reqId": 1, "code": 0, "data": {
"targets": [
{"targetId": "1", "roi": {"x": 1000, "y": 500, "width": 400, "height": 400}, "distance": 5.0, "status": "tracking"}
]
}}
更新已有标靶的配置。
请求:
{"reqId": 1, "method": "setTargets", "params": {
"targets": [{"targetId": "1", "distance": 5.5}]
}}
删除指定标靶。
请求:
{"reqId": 1, "method": "deleteTargets", "params": {
"targetIds": ["2"]
}}
设置电机角度。
注意: O1 仅支持水平 (pan) 方向,不支持 tilt 参数。
参数:
| 字段 | 类型 | 范围 | 说明 |
|---|---|---|---|
pan | Float | -180 ~ 180 | 水平角度 (°) |
speed | Integer | 1-100 | 转动速度 (%) |
请求:
{"reqId": 1, "method": "setMotorAngle", "params": {"pan": 45.0, "speed": 50}}
获取当前电机角度。
请求:
{"reqId": 1, "method": "getMotorAngle", "params": {}}
响应:
{"reqId": 1, "code": 0, "data": {"pan": 45.0}}
设置巡航点。
注意: O1 巡航点仅支持 pan 角度。
参数:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
pathId | Integer | 是 | 路径 ID |
pointId | Integer | 是 | 巡航点 ID |
pan | Float | 是 | 水平角度 |
targets | Array | 是 | 标靶 ID 列表 |
dwellTime | Integer | 否 | 停留时间 (秒) |
请求:
{"reqId": 1, "method": "setCruisePoint", "params": {
"pathId": 1,
"pointId": 1,
"pan": 45.0,
"targets": ["1"],
"dwellTime": 60
}}
启动巡航。
请求:
{"reqId": 1, "method": "startPatrol", "params": {"pathId": 1}}
停止巡航。
请求:
{"reqId": 1, "method": "stopPatrol", "params": {}}
测量运行时,设备按采样频率上报位移数据。
主题: vdm/{deviceId}/telemetry
{"disp":{"t":1734567890,"d":{"1":{"dx":[0.01,0.02,0.03],"dy":[0.00,0.01,0.01]}}}}
| 字段 | 单位 | 说明 |
|---|---|---|
t | 秒 | Unix 时间戳 |
dx | mm | X 方向位移 |
dy | mm | Y 方向位移 |
位移超限时通过 3A 主题上报。
主题: vdm/{deviceId}/3A
{
"3A": "DISPLACEMENT_EXCEEDED",
"level": 2,
"targetId": "1",
"value": 12.5,
"threshold": 10.0,
"ts": 1734567890
}
告警级别:
| 级别 | 名称 | 说明 |
|---|---|---|
| 0 | - | 恢复 |
| 1 | alert | 预警 |
| 2 | alarm | 告警 |
| 3 | action | 紧急 |
设备状态变化时通过 event 主题上报。
主题: vdm/{deviceId}/event
{
"event": "cruisePointReached",
"ts": 1734567890,
"data": {"pathId": 1, "pointId": 1}
}
事件类型:
| 事件 | 说明 | data 内容 |
|---|---|---|
measurementStarted | 测量开始 | {} |
measurementStopped | 测量停止 | {} |
TARGET_LOST | 标靶丢失 | {"targetId": "1"} |
targetRecovered | 标靶恢复 | {"targetId": "1"} |
motorMoved | 电机移动完成 | {"pan": 45.0} |
cruisePointReached | 到达巡航点 | {"pathId": 1, "pointId": 1} |
| 码 | 说明 |
|---|---|
| 0 | 成功 |
| 1 | 参数无效 |
| 2 | 缺少必填参数 |
| 100 | 标靶不存在 |
| 102 | 标靶初始化失败 |
| 104 | 标靶丢失 |
| 200 | 测量未启动 |
| 201 | 测量已在运行 |
| 300 | 电机不可用 |
| 302 | 电机运动中 |
| 310 | 垂直电机不可用(O1 不支持) |
| 400 | 巡航功能不可用 |
| 403 | 巡航已在运行 |
{"reqId": 1, "method": "setMotorAngle", "params": {"pan": 0}}
{"reqId": 2, "method": "initRefTargets", "params": {
"targets": [{"targetId": "1", "roi": {"x": 1000, "y": 500, "width": 400, "height": 400}, "distance": 5.0}]
}}
{"reqId": 3, "method": "setCruisePoint", "params": {
"pathId": 1, "pointId": 1, "pan": 0, "targets": ["1"], "dwellTime": 60
}}
{"reqId": 4, "method": "startMeasurement", "params": {}}
型号: X1 | 版本: 1.0 | 更新: 2026-01-08
X1 是单目双轴旋转式视觉位移计,支持水平和垂直云台控制及自动巡航。
| 方法 | 说明 |
|---|---|
getAttr | 获取属性 |
setAttr | 设置属性 |
reboot | 重启设备 |
syncTime | 同步时间 |
| 方法 | 说明 |
|---|---|
initRefTargets | 初始化标靶 |
addTargets | 添加标靶 |
getTargets | 获取标靶列表 |
setTargets | 更新标靶配置 |
deleteTargets | 删除标靶 |
| 方法 | 说明 |
|---|---|
startMeasurement | 启动测量 |
stopMeasurement | 停止测量 |
setLightLevel | 设置补光灯发光挡位 |
getLightLevel | 获取补光灯发光挡位 |
snapshot | 获取快照 |
| 方法 | 说明 |
|---|---|
getStorageInfo | 获取存储信息 |
queryTelemetry | 查询历史数据 |
uploadS3 | 上传数据到 S3 |
| 方法 | 说明 |
|---|---|
setMotorAngle | 设置电机角度 |
getMotorAngle | 获取电机角度 |
setMotorZero | 设置电机零点 |
enableMotor | 启用电机 |
disableMotor | 禁用电机 |
| 方法 | 说明 |
|---|---|
getCruisePaths | 获取巡航路径 |
setCruisePoint | 设置巡航点 |
removeCruisePoint | 移除巡航点 |
startPatrol | 启动巡航 |
stopPatrol | 停止巡航 |
getPatrolStatus | 获取巡航状态 |
初始化参考标靶。
请求:
{"reqId": 1, "method": "initRefTargets", "params": {
"targets": [{"targetId": "1", "roi": {"x": 1000, "y": 500, "width": 400, "height": 400}, "distance": 5.0}]
}}
在已有标靶基础上添加新标靶。
请求:
{"reqId": 1, "method": "addTargets", "params": {
"targets": [
{"targetId": "2", "roi": {"x": 800, "y": 400, "width": 400, "height": 400}, "distance": 6.0}
]
}}
响应:
{"reqId": 1, "code": 0, "data": {"addedIds": ["2"]}}
获取当前标靶列表。
请求:
{"reqId": 1, "method": "getTargets", "params": {}}
响应:
{"reqId": 1, "code": 0, "data": {
"targets": [
{"targetId": "1", "roi": {"x": 1000, "y": 500, "width": 400, "height": 400}, "distance": 5.0, "status": "tracking"}
]
}}
更新已有标靶的配置。
请求:
{"reqId": 1, "method": "setTargets", "params": {
"targets": [{"targetId": "1", "distance": 5.5}]
}}
删除指定标靶。
请求:
{"reqId": 1, "method": "deleteTargets", "params": {
"targetIds": ["2"]
}}
设置电机角度。
参数:
| 字段 | 类型 | 范围 | 说明 |
|---|---|---|---|
pan | Float | -180 ~ 180 | 水平角度 (°) |
tilt | Float | -90 ~ 90 | 垂直角度 (°) |
speed | Integer | 1-100 | 转动速度 (%) |
请求:
{"reqId": 1, "method": "setMotorAngle", "params": {"pan": 45.0, "tilt": -10.0, "speed": 50}}
获取当前电机角度。
请求:
{"reqId": 1, "method": "getMotorAngle", "params": {}}
响应:
{"reqId": 1, "code": 0, "data": {"pan": 45.0, "tilt": -10.0}}
设置巡航点。
参数:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
pathId | Integer | 是 | 路径 ID |
pointId | Integer | 是 | 巡航点 ID |
pan | Float | 是 | 水平角度 |
tilt | Float | 是 | 垂直角度 |
targets | Array | 是 | 标靶 ID 列表 |
dwellTime | Integer | 否 | 停留时间 (秒) |
请求:
{"reqId": 1, "method": "setCruisePoint", "params": {
"pathId": 1,
"pointId": 1,
"pan": 45.0,
"tilt": -10.0,
"targets": ["1"],
"dwellTime": 60
}}
启动巡航。
请求:
{"reqId": 1, "method": "startPatrol", "params": {"pathId": 1}}
停止巡航。
请求:
{"reqId": 1, "method": "stopPatrol", "params": {}}
测量运行时,设备按采样频率上报位移数据。
主题: vdm/{deviceId}/telemetry
{"disp":{"t":1734567890,"d":{"1":{"dx":[0.01,0.02,0.03],"dy":[0.00,0.01,0.01]}}}}
| 字段 | 单位 | 说明 |
|---|---|---|
t | 秒 | Unix 时间戳 |
dx | mm | X 方向位移 |
dy | mm | Y 方向位移 |
位移超限时通过 3A 主题上报。
主题: vdm/{deviceId}/3A
{
"3A": "DISPLACEMENT_EXCEEDED",
"level": 2,
"targetId": "1",
"value": 12.5,
"threshold": 10.0,
"ts": 1734567890
}
告警级别:
| 级别 | 名称 | 说明 |
|---|---|---|
| 0 | - | 恢复 |
| 1 | alert | 预警 |
| 2 | alarm | 告警 |
| 3 | action | 紧急 |
设备状态变化时通过 event 主题上报。
主题: vdm/{deviceId}/event
{
"event": "cruisePointReached",
"ts": 1734567890,
"data": {"pathId": 1, "pointId": 1}
}
事件类型:
| 事件 | 说明 | data 内容 |
|---|---|---|
measurementStarted | 测量开始 | {} |
measurementStopped | 测量停止 | {} |
TARGET_LOST | 标靶丢失 | {"targetId": "1"} |
targetRecovered | 标靶恢复 | {"targetId": "1"} |
motorMoved | 电机移动完成 | {"pan": 45.0, "tilt": -10.0} |
cruisePointReached | 到达巡航点 | {"pathId": 1, "pointId": 1} |
| 码 | 说明 |
|---|---|
| 0 | 成功 |
| 1 | 参数无效 |
| 2 | 缺少必填参数 |
| 100 | 标靶不存在 |
| 102 | 标靶初始化失败 |
| 104 | 标靶丢失 |
| 200 | 测量未启动 |
| 201 | 测量已在运行 |
| 300 | 电机不可用 |
| 302 | 电机运动中 |
| 303 | 电机到达限位 |
| 400 | 巡航功能不可用 |
| 403 | 巡航已在运行 |
{"reqId": 1, "method": "setMotorAngle", "params": {"pan": 0, "tilt": 0}}
{"reqId": 2, "method": "initRefTargets", "params": {
"targets": [{"targetId": "1", "roi": {"x": 1000, "y": 500, "width": 400, "height": 400}, "distance": 5.0}]
}}
{"reqId": 3, "method": "setCruisePoint", "params": {
"pathId": 1, "pointId": 1, "pan": 0, "tilt": 0, "targets": ["1"], "dwellTime": 60
}}
{"reqId": 4, "method": "startMeasurement", "params": {}}
型号: X2W / X2W4M | 版本: 1.0 | 更新: 2026-01-08
X2W 系列是双目旋转式视觉位移计,支持双轴云台和自动巡航,适用于多点巡航监测场景。
| 方法 | 说明 |
|---|---|
getAttr | 获取属性 |
setAttr | 设置属性 |
reboot | 重启设备 |
syncTime | 同步时间 |
| 方法 | 说明 |
|---|---|
initRefTargets | 初始化标靶 |
addTargets | 添加标靶 |
getTargets | 获取标靶列表 |
setTargets | 更新标靶配置 |
deleteTargets | 删除标靶 |
| 方法 | 说明 |
|---|---|
startMeasurement | 启动测量 |
stopMeasurement | 停止测量 |
setLightLevel | 设置补光灯发光挡位 |
getLightLevel | 获取补光灯发光挡位 |
snapshot | 获取快照 |
| 方法 | 说明 |
|---|---|
getStorageInfo | 获取存储信息 |
queryTelemetry | 查询历史数据 |
uploadS3 | 上传数据到 S3 |
| 方法 | 说明 |
|---|---|
setMotorAngle | 设置电机角度 |
getMotorAngle | 获取电机角度 |
setMotorZero | 设置电机零点 |
enableMotor | 启用电机 |
disableMotor | 禁用电机 |
| 方法 | 说明 |
|---|---|
getCruisePaths | 获取巡航路径 |
setCruisePoint | 设置巡航点 |
removeCruisePoint | 移除巡航点 |
startPatrol | 启动巡航 |
stopPatrol | 停止巡航 |
getPatrolStatus | 获取巡航状态 |
双目设备需要指定 sensorId 参数。
参数:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
targets | Array | 是 | 标靶配置 |
targets[].targetId | String | 否 | 标靶 ID |
targets[].sensorId | Integer | 是 | 视觉传感器 ID (0 或 1) |
targets[].roi | Object | 是 | ROI 区域 |
targets[].distance | Float | 是 | 测量距离 (m) |
请求(X2W):
{"reqId": 1, "method": "initRefTargets", "params": {
"targets": [
{"targetId": "1", "sensorId": 0, "roi": {"x": 1000, "y": 500, "width": 400, "height": 400}, "distance": 5.0},
{"targetId": "2", "sensorId": 1, "roi": {"x": 1200, "y": 600, "width": 400, "height": 400}, "distance": 5.0}
]
}}
请求(X2W4M):
{"reqId": 1, "method": "initRefTargets", "params": {
"targets": [
{"targetId": "1", "sensorId": 0, "roi": {"x": 500, "y": 300, "width": 200, "height": 200}, "distance": 5.0},
{"targetId": "2", "sensorId": 1, "roi": {"x": 600, "y": 350, "width": 200, "height": 200}, "distance": 5.0}
]
}}
注意: X2W4M 分辨率为 2560×1440,ROI 坐标需相应调整。
在已有标靶基础上添加新标靶。
请求:
{"reqId": 1, "method": "addTargets", "params": {
"targets": [
{"targetId": "3", "sensorId": 0, "roi": {"x": 800, "y": 400, "width": 400, "height": 400}, "distance": 6.0}
]
}}
响应:
{"reqId": 1, "code": 0, "data": {"addedIds": ["3"]}}
获取当前标靶列表。
请求:
{"reqId": 1, "method": "getTargets", "params": {}}
响应:
{"reqId": 1, "code": 0, "data": {
"targets": [
{"targetId": "1", "sensorId": 0, "roi": {"x": 1000, "y": 500, "width": 400, "height": 400}, "distance": 5.0, "status": "tracking"},
{"targetId": "2", "sensorId": 1, "roi": {"x": 1200, "y": 600, "width": 400, "height": 400}, "distance": 5.0, "status": "tracking"}
]
}}
更新已有标靶的配置。
请求:
{"reqId": 1, "method": "setTargets", "params": {
"targets": [{"targetId": "1", "distance": 5.5}]
}}
删除指定标靶。
请求:
{"reqId": 1, "method": "deleteTargets", "params": {
"targetIds": ["2"]
}}
设置电机角度。
参数:
| 字段 | 类型 | 范围 | 说明 |
|---|---|---|---|
pan | Float | -180 ~ 180 | 水平角度 (°) |
tilt | Float | -90 ~ 90 | 垂直角度 (°) |
speed | Integer | 1-100 | 转动速度 (%) |
请求:
{"reqId": 1, "method": "setMotorAngle", "params": {"pan": 45.0, "tilt": -10.0, "speed": 50}}
获取当前电机角度。
请求:
{"reqId": 1, "method": "getMotorAngle", "params": {}}
响应:
{"reqId": 1, "code": 0, "data": {"pan": 45.0, "tilt": -10.0}}
设置巡航点。
参数:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
pathId | Integer | 是 | 路径 ID |
pointId | Integer | 是 | 巡航点 ID |
pan | Float | 是 | 水平角度 |
tilt | Float | 是 | 垂直角度 |
targets | Array | 是 | 标靶 ID 列表 |
dwellTime | Integer | 否 | 停留时间 (秒) |
请求:
{"reqId": 1, "method": "setCruisePoint", "params": {
"pathId": 1,
"pointId": 1,
"pan": 45.0,
"tilt": -10.0,
"targets": ["1", "2"],
"dwellTime": 60
}}
支持配置 3D 融合上报指标。
请求:
{"reqId": 1, "method": "setAttr", "params": {
"reportMetrics": ["dx", "dy", "dz", "tilt"]
}}
| 指标 | 说明 |
|---|---|
dx | X方向累积位移变化 |
dy | Y方向累积位移变化 |
dz | Z方向累积位移变化 |
tilt | 倾斜角度变化 |
测量运行时,设备按采样频率上报位移数据。
主题: vdm/{deviceId}/telemetry
{"disp":{"t":1734567890,"d":{"1":{"dx":[0.01,0.02],"dy":[0.00,0.01],"dz":[0.01,0.02],"tilt": 0.01}}}}
| 字段 | 单位 | 说明 |
|---|---|---|
t | 秒 | Unix 时间戳 |
dx | mm | X方向累积位移变化 |
dy | mm | Y方向累积位移变化 |
dz | mm | Z方向累积位移变化 |
tilt | ″(角秒) | 倾斜角度变化 |
位移超限时通过 3A 主题上报。
主题: vdm/{deviceId}/3A
{
"3A": "DISPLACEMENT_EXCEEDED",
"level": 2,
"targetId": "1",
"value": 12.5,
"threshold": 10.0,
"ts": 1734567890
}
告警级别:
| 级别 | 名称 | 说明 |
|---|---|---|
| 0 | - | 恢复 |
| 1 | alert | 预警 |
| 2 | alarm | 告警 |
| 3 | action | 紧急 |
设备状态变化时通过 event 主题上报。
主题: vdm/{deviceId}/event
{
"event": "cruisePointReached",
"ts": 1734567890,
"data": {"pathId": 1, "pointId": 1}
}
事件类型:
| 事件 | 说明 | data 内容 |
|---|---|---|
measurementStarted | 测量开始 | {} |
measurementStopped | 测量停止 | {} |
TARGET_LOST | 标靶丢失 | {"targetId": "1"} |
targetRecovered | 标靶恢复 | {"targetId": "1"} |
motorMoved | 电机移动完成 | {"pan": 45.0, "tilt": -10.0} |
cruisePointReached | 到达巡航点 | {"pathId": 1, "pointId": 1} |
| 码 | 说明 |
|---|---|
| 0 | 成功 |
| 1 | 参数无效 |
| 2 | 缺少必填参数 |
| 100 | 标靶不存在 |
| 102 | 标靶初始化失败 |
| 104 | 标靶丢失 |
| 200 | 测量未启动 |
| 201 | 测量已在运行 |
| 300 | 电机不可用 |
| 302 | 电机运动中 |
| 303 | 电机到达限位 |
| 400 | 巡航功能不可用 |
| 403 | 巡航已在运行 |
1. 设置巡航点 1 (pan=0, tilt=0)
└─ 初始化标靶 1, 2
2. 设置巡航点 2 (pan=45, tilt=-10)
└─ 初始化标靶 3
3. 启动巡航
└─ 设备自动在各点之间循环
└─ 每个点停留 dwellTime 秒进行测量
4. 接收遥测数据
└─ 位移数据包含当前巡航点的标靶
{"reqId": 1, "method": "setMotorAngle", "params": {"pan": 0, "tilt": 0}}
{"reqId": 2, "method": "initRefTargets", "params": {
"targets": [
{"targetId": "1", "sensorId": 0, "roi": {"x": 1000, "y": 500, "width": 400, "height": 400}, "distance": 5.0},
{"targetId": "2", "sensorId": 1, "roi": {"x": 1000, "y": 500, "width": 400, "height": 400}, "distance": 5.0}
]
}}
{"reqId": 3, "method": "setCruisePoint", "params": {
"pathId": 1, "pointId": 1, "pan": 0, "tilt": 0, "targets": ["1", "2"], "dwellTime": 60
}}
{"reqId": 4, "method": "startMeasurement", "params": {}}
本章节对文档中使用的专业术语和概念进行解释。
| 术语 | 英文 | 说明 |
|---|---|---|
| VDM | Visual Displacement Meter | 视觉位移计 |
| 设备 ID | Device ID | 设备的唯一标识符 |
| 标靶 | Target | 视觉位移计通过监测标靶计算出结构物变形 |
| 基准点标靶 | Reference Target | 基准点用于纠正设备测量中的误差 |
| 感兴趣区域 | Region of Interest (ROI) | 用于框选标靶的位置,标识标靶的名字 |
| 累积位移变化 | Displacement | 标靶相对于初值位置的位移变化量 |
| 采样频率 | Sampling Frequency | 视觉位移计的测量频率 |
| 术语 | 英文 | 说明 |
|---|---|---|
| 巡航 | Cruise / Patrol | 视觉位移计旋转监测时,自动巡航监测不同视野范围内的标靶 |
| 巡航路径 | Cruise Path | 视觉位移计旋转监测时的指定路线 |
| 巡航点 | Cruise Point / Waypoint | 视觉位移计通过监测标靶计算出结构物变形 |
| 停留时间 | Dwell Time | 基准点用于纠正设备测量中的误差 |
| 自动巡航 | Auto Patrol | 设备的唯一标识符 |
| 术语 | 英文 | 说明 |
|---|---|---|
| 监测项目 | Project | 一组相关监测点和设备的集合,通常对应一个工程项目 |
| 监测点 | Monitoring Point | 具体的测量位置,可关联一个或多个设备传感器数据源 |
| 遥测数据 | Telemetry | 设备上报的测量数据,如位移、温度、湿度等 |
| 3A | Alert, Alarm and Action | 告警的等级:预警、报警和行动 |
| 术语 | 英文 | 说明 |
|---|---|---|
| MQTT | Message Queuing Telemetry Transport | 轻量级消息传输协议,用于物联网设备通信 |
| Topic | - | MQTT 消息主题,用于消息的分类和路由 |
| QoS | Quality of Service | 消息服务质量等级(0/1/2) |
| 术语 | 英文 | 说明 |
|---|---|---|
| JSON | JavaScript Object Notation | 轻量级数据交换格式 |
| 时间戳 | Timestamp | Unix 时间戳,单位为毫秒 |
| 术语 | 英文 | 说明 |
|---|---|---|
| 客户 ID | Customer ID | 客户身份的唯一标识符 |
| Token | - | 认证令牌,用于 API 调用身份验证 |
| 实体 | Entity | 平台中的对象,包括设备、监测点、项目等 |