这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

平台端 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

文档导航

文档说明
核心概念数据模型与业务流程
快速入门SDK 使用教程
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

核心特点:

  1. 第一层(租户层):客户级数据隔离
  2. 第二层(项目层):一个项目对应一个监测工程
  3. 第三层(数据采集层)
    • 监测点:业务视角,反映监测需求
    • 设备:物理设备,采集原始数据
    • 关键:监测点 ↔ 设备 是多对多映射关系

层级关系

层级说明用途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 查询历史遥测数据时,返回按指标分组的时间序列:

字段类型说明
tsLong时间戳(毫秒级 Unix 时间戳)
valueNumber测量值

示例:

{
  "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()

典型使用流程

  1. 初始化:通过 HTTP 查询项目、监测点列表
  2. 加载历史:通过 HTTP 查询历史遥测数据
  3. 实时更新:通过 MQTT 订阅接收实时数据推送

下一步

根据您的需求选择阅读路径:

目标推荐阅读
快速体验对接快速入门 - SDK 使用教程
实时监控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}客户 IDcust_abc123
{projectId}监测项目 IDproj_abc
{pointId}监测点 IDpoint_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 字段说明

字段类型说明
entityEntityRef实体引用(类型 + ID)
disp, tilt, …Object/Number指标数据(按需配置)

注意:监测点名称、项目名称等元数据通过 HTTP API 获取。

常见指标

指标说明单位
dxX 方向累积位移变化mm
dyY 方向累积位移变化mm
dzZ 方向累积位移变化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": {
    ...
  }
}
字段类型说明
typeString消息类型
tsLongUnix 毫秒时间戳
payloadObject具体数据内容

开发者可以统一解析:

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 字段说明

字段类型必填说明
idString告警唯一标识
alarmTypeString告警类型(见数据字典)
severityString告警级别
statusString告警状态
originator.entityTypeString实体类型:DEVICEPOINT
originator.idString实体 ID
detail.metricString触发告警的指标
detail.valueNumber触发时的实际值
detail.thresholdNumber阈值
detail.messageString告警描述

告警级别 (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 字段说明

字段类型说明
deviceIdString设备 ID
eventTypeString事件类型
dataObject事件相关数据

通用事件类型

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)

字段类型说明
dispObject按标靶 ID 组织的位移数据
dx, dy, dzNumber累积位移变化 (mm)
tiltNumber倾斜变化角度(″ 角秒)

环境数据 (env)

部分 VDM 型号支持环境数据采集:

字段类型单位说明
temperatureNumber°C温度
humidityNumber%RH相对湿度
pressureNumberkPa大气压

状态数据 (status)

字段类型说明
signal.typeString网络类型:4G, Ethernet
signal.rssiInteger信号强度 (dBm)
pwr.batteryNumber电池电压 (V)
pwr.inputDCNumberDC 输入电压 (V)
storage.percentInteger存储使用率 (%)

告警

设备告警格式参见 告警消息

视觉位移计设备告警示例

{
  "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_VOLTAGEDC输入电压低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
  }
}
字段类型说明
entityEntityRef实体引用
sensorIdInteger视觉传感器 ID(0 或 1)
triggerString触发类型
urlString图片下载 URL
ttlIntegerURL 有效期(秒)

触发类型

trigger说明
snapshot手动快照
3A告警触发
periodic定时拍照

属性变更

{
  "type": "attributes",
  "ts": 1735560000000,
  "payload": {
    "entity": {
      "type": "DEVICE",
      "id": "dev_001"
    },
    "measureFrequency": 10,
    "irLightEnabled": true
  }
}

VDM 常见属性

属性类型说明
measureFrequencyInteger测量频率 (Hz)
irLightEnabledBoolean红外补光灯开关
targetCountInteger标靶数量
firmwareVersionString固件版本

4 - 数据字典

字段与枚举定义

监测指标

位移类

指标名称单位说明
dxX方向位移mm水平位移
dyY方向位移mm水平位移
dzZ方向位移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 86012025-01-08T10:30:00Z

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

订阅后收不到数据

检查:

  1. Topic 格式是否正确:inteagle/{customerId}/p/{projectId}/#
  2. 设备是否在线并上报数据
  3. 使用通配符 # 测试是否有任何消息

频繁断线

解决:

  • Keep Alive 设为 60 秒
  • 使用唯一 Client ID
  • 实现自动重连逻辑

数据问题

时间戳转换

API 返回毫秒时间戳,转换时需除以 1000:

Instant instant = Instant.ofEpochMilli(ts);
LocalDateTime dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());

查询不到历史数据

检查:

  • 时间范围:endTs > startTs
  • 数据点数量限制:单次最多 1000 点
  • 监测点是否有数据:先查询最新数据确认

需要帮助?

请联系技术支持。